0

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

在这个例子中,为了 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());
}
4

2 回答 2

4

极有可能完全无关紧要。编译器甚至可能不会为两者生成不同的程序集,即使生成了,微小的 thunk 的性能成本也可以忽略不计。甚至没有理由去想这个。

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

于 2012-08-08T04:32:17.260 回答
1

我将只实现一个接受 Point 对象的对象,然后创建一个接受 a 的 Point 构造函数std::initializer_list,所以当你想传递单个双打时,你可以使用类似的东西:

SetPoints({xA, yA}, {xB, yB}, {xC, yC});
于 2012-08-08T04:53:48.837 回答