如果我做
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
成为唯一的引用(即,可以在其他地方引用,但不能通过任何方式引用)这些参考文献将被修改)?
有__restrict
扩展名,您可以在gcc.godbolt.org上尝试:
typedef void Cb();
int foo(const int & __restrict a, Cb cb) {
int x = a;
cb();
return x - a;
}
奇怪的是,只有clang进行了优化,而gcc却没有进行优化。
注意,类似限制的别名被认为是C ++标准的一部分:
也许将来您可以按照标准进行操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句