【发布时间】:2015-02-02 15:39:12
【问题描述】:
如果我这样做
typedef void Cb();
int foo(int const& a, Cb cb) {
int x = a;
cb();
return x - a;
}
用g++ -O3 -save-temps -c foo.cpp编译,我看到减法被保留了,而如果cb();被注释掉,整个函数优化为
xorl %eax, %eax
我可以对参数a 的规范做些什么,以便无论调用cb(),并且不强制a 成为唯一引用(即它可能会在其他地方被引用,但不会通过这些引用对其进行修改)?
【问题讨论】:
-
您可以按值获取参数 (
int a),这将向编译器保证没有任何东西可以改变它。我也不确定您所说的“唯一参考”是什么意思。 -
const int x = a 会发生什么?
-
@pepper_chico
a仍然可以引用通过调用cb()可能会更改的内容,因此减法仍然无法优化。 -
@sjdowling 标准中没有任何内容要求引用以与指针相同的方式实现;引用只是对象的另一个名称。
-
有“纯”函数的概念,但不规范。 gcc 有一个为此目的的扩展:stackoverflow.com/q/9441262 结果正如预期的那样,就像没有函数调用一样:coliru.stacked-crooked.com/a/0639d89c013ae02f
标签: c++ c++11 optimization reference