【发布时间】:2011-01-03 21:04:35
【问题描述】:
考虑以下几点:
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
}
既然Point是一个POD,那么背着调用者做一个副本应该不会有什么副作用吧?
如果是这种情况,那么我总是可以通过 const 引用传递 POD 对象,无论多小,而不必担心最佳传递语义。对吧?
编辑: 我对 GCC 编译器特别感兴趣。我想我可能需要编写一些测试代码并查看 ASM。
【问题讨论】:
-
我试着搜索这个问题,但我一直在想出关于按值传递、按引用传递等的 abc 的命中率。如果已经讨论过了,我很抱歉。
-
通常,相反的方法可能是更好的方法 (cpp-next.com/archive/2009/08/want-speed-pass-by-value)。按值传递,让编译器在需要的时候转成按引用传递
标签: c++ optimization