Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
可以说我有这段代码:
class Base { public: void f() {} private: int n; }; Base foo() { Base b; // processing return b; }
Base 没有定义复制构造函数,并且查看其成员,编译器不会合成一个。 是否为此代码应用了命名返回值 (NRV) 优化?编译器应用 NRV 的确切规则是什么?
首先,没有确切的规则,因为 NRVO 不是标准的明确部分,而是标准的其他部分允许的。编译器永远不需要使用 NRVO,并且不同的编译器将被不同的构造禁止使用 NRVO。
在您的情况下,没有明显的限制使用 NRVO。没有显式析构函数或复制构造函数,并且返回的变量在任何条件或循环块之外声明。不过,这取决于该// processing地区的情况。
// processing