考虑以下:

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/

10-12 20:47