考虑以下几点:C++编译器是否将通过const引用POD参数传递给pass by copy?
struct Point {double x; double y;};
double complexComputation(const& Point p1, const Point& p2)
{
// p1 and p2 used frequently in computations
}
做的编译器优化传递通过引用到通通过复制,防止频繁的反引用?换句话说转换complexComputation
这个:
double complexComputation(const& Point p1, const Point& p2)
{
double x1 = p1.x; double x2 = p2.x;
double y1 = p1.y; double y2 = p2.y;
// x1, x2, y1, y2 stored in registers and used frequently in computations
}
由于点是一个POD,也可以通过使呼叫者的背后,请右键没有副作用?
如果是这样的话,那么我可以永远只是const引用传递POD对象,不管多么小,而不必担心最佳传递机制。对?
编辑: 我很感兴趣,特别是GCC编译器。我想我可能不得不编写一些测试代码并查看ASM。
我试过寻找这个问题,但我不断地想出关于传递值,传递引用等的abc的点击。如果已经讨论过,我很抱歉。 – 2010-01-11 18:34:50
通常,相反可能是更好的方法(http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/)。按价值传递,并让编译器将其转为通过引用时,它想要 – jalf 2010-01-11 18:43:51
+1好问题 – 2010-01-11 18:44:30