应该在带花括号的return语句中调用什么构造函数?

考虑以下代码:

struct NonMovable {
  NonMovable() = default;
  NonMovable(const NonMovable&) = default;
  NonMovable(NonMovable&&) = delete;
};

NonMovable f() {
  NonMovable nonMovable;
  return {nonMovable};
  //return NonMovable(nonMovable);
}

int main() {}

GCC 和 Clang 编译该代码没有错误,即在使用大括号时调用了复制构造函数。但是 msvc 拒绝它https://godbolt.org/z/49onKj并出现错误:

error C2280: 'NonMovable::NonMovable(NonMovable &&)': attempting to reference a deleted function

当我指定显式调用复制构造函数(因为nonMovable不是右值)时,mvsc 接受代码。

谁是对的?在return {var};那里的语句中应该调用什么类型的构造函数?

以上是应该在带花括号的return语句中调用什么构造函数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>