C++ 速度/效率:为 DRY 互斥函数创建临时或分解参数



从速度和效率的角度来看:哪个被认为是最佳实践,创建一个临时对象或分解一个(可能是临时的)参数对象?

在此示例中,函数的实现对于 DRY 目的来说是互斥的。两者都不会如图所示实现,但一个将根据另一个来实施,这将委派实际工作。

void SetPoints(double xA, double yA, double xB, double yB, double xC, double yC);
void SetPoints(const Point& A, const Point& B, const Point& C);
///Option one: create temporary objects:
void SetPoints(double xA, double yA, double xB, double yB, double xC, double yC) {
    SetPoints(Point(xA, yA), Point(xB, yB), Point(xC, yC));
}
//Option two: decompose object arguments
void SetPoints(const Point& A, const Point& B, const Point& C) {
    SetPoints(A.GetX(), A.GetY(), B.GetX(), B.GetY(), C.GetX(), C.GetY());
}

极有可能完全无关紧要。编译器甚至可能不会为两者生成不同的程序集,即使它这样做了,一个小笨蛋的性能成本也可以忽略不计。甚至没有理由考虑这一点。

在这种情况下,最好的功能是最清晰的/等。

我只会实现接受 Point 对象的那个,然后创建一个接受 std::initializer_list 的 Point 构造函数,所以当你想传递单个双精度时,你可以使用如下的东西:

SetPoints({xA, yA}, {xB, yB}, {xC, yC});

最新更新