钱德勒卡鲁斯在他的谈话对编译器的优化表示,编译器在与按引用传递参数优化功能可怕.我可以理解,当参数是非const引用时很难,因为编译器必须处理内存,或者参数的类型很复杂(一些奇怪的结构或类).但是如果参数是const引用而内置类型真的有问题吗?优化器可以代替const float&用const float?启用SSE指令后,它可能会更有帮助,因为编译器可以正确地为它们对齐数据.
das*_*ght 13
优化器可以代替
const float&用const float?
不,他们不能这样做,因为它可能会改变程序的语义.甲const参考仍然是一个参考.它不能被价值取代.考虑这个例子:
void foo(const float& x, float a[]) {
cout << x << endl;
a[0] += 10.5;
cout << x << endl;
}
int main() {
float a[1] = { 3.25 };
foo(a[0], a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这打印
3.25
13.75
Run Code Online (Sandbox Code Playgroud)
如果您更改const float&与const float,其结果将是
3.25
3.25
Run Code Online (Sandbox Code Playgroud)
这里的问题是a[0]相同的x,但是连接是由调用者建立的,它在优化器的控制范围之外.
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |