自1992年以来,我一直在使用C++(并且阅读了大量有关该语言的文章),所以我对这门语言的了解很多,但远非如此。我的问题是有关C++ 11命名的返回值优化的问题-有什么保证可以执行?我倾向于发送非常量参数(C++ 97样式)或使用shared_ptr(C++ 11样式),甚至使用ptr-to-ptr(C样式)。原因之一是,使用非常量引用args或shared_ptr时,可以保证不会产生任何额外的对象副本。
所以我的问题是(尤其是对于那些从事实时或内核工作的C++程序员):您喜欢哪种惯用法?我真的希望这个问题不要被认为是不精确,基于观点或愚蠢的愚人-我知道它与有效的现代C++编程高度相关。
最佳答案
在12.8 / 31节中,C++ 11标准写道
这意味着您的编译器可能永远不会使用RVO(尽管大多数编译器都支持RVO)。
鉴于以上所述,“有效现代C++”(第25项)中的Scott Meyers的建议是
基本原理如下:
Clang将为此发出
-Wpessimizing-move
和-Wredundant-move
警告。参见this link。关于c++ - C++ NRVO保证?还是更好地选择非const ref参数或shared_ptr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29029629/