考虑以下:
struct A { /* ... */ };
A foo() {
auto p = std::make_pair(A{}, 2);
// ... do something
return p.first;
}
auto a = foo();
p.first
是否将被复制,移动或RVO编辑? 最佳答案
我在Visual Studio 2010和gcc-5.1中发现RVO是而不是(例如参见http://coliru.stacked-crooked.com/a/17666dd9e532da76)。
该标准的相关部分是12.8.31.1 [class.copy]。它声明允许复制省略(我的突出显示):
由于p.first
不是对象的名称,因此禁止RVO。
关于c++ - RVO是否对对象成员起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33344259/