Meh*_*dad 8 c++ return-value-optimization nrvo
假设我有这个功能
#include <string>
std::string const foo()
{
std::string s = "bar";
return s;
}
int main()
{
std::string t = foo();
}
Run Code Online (Sandbox Code Playgroud)
编译器是否可以执行(命名)返回值优化t,即使由于-ness差异的类型s和t返回类型不同?fooconst
(如果C++ 03和C++ 11的答案不同,那么我肯定对了解C++ 03答案感兴趣.)
Che*_*Alf 10
RVO优化无法打破a的承诺const,因此没有问题:可以执行RVO.
但是,移动语义受到影响const.它有效地禁用了移动语义,即调用T(T&&)构造函数或移动赋值运算符.所以一般来说,不要const在返回值上使用.
Scott Meyers最初建议const使用返回值,以获得更加理智的编码.
然后Andrei Alexandrescu在他的关于DDJ的Mojo文章中指出,从此以后,对于移动语义,const返回值应该更好地被禁止,并且斯科特先前的建议被忽略了.
现在我从不费心去学习各种专门的RVO缩略词,比如NRVO等等.一个主要原因是这些改变了意思的中途,最初在g ++编译器中具有一些自定义功能的意义.这里的术语只是一团糟.
所以,如果我的术语错了,我应该使用其他一些缩写词,那么请随意纠正!:-)
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |