c++ 我们可以从函数的值返回具有删除/专用复制/移动构造函数的对象吗?

在C 03中,不可能通过值返回具有私有非定义复制构造函数的类的对象:

struct A { A(int x) { ... } private: A(A const&); };

A f() {
  return A(10); // error!
  return 10;    // error too!
}

我在想,在C 11中提到这个限制,使得可以编写没有用于复制或移动的构造函数的类的类类型返回类型的函数?我记得允许一个函数的调用者使用新返回的对象可能是有用的,但是它们不能复制该值并将其存储在某个地方.

最佳答案
这是如何工作的

A f() {
  return { 10 };
}

即使A没有工作副本或移动构造函数,也没有其他构造函数可以复制或移动A!

为了利用C11的这个特性,构造函数(在这种情况下为int)必须是非显式的.

转载注明原文:c++ 我们可以从函数的值返回具有删除/专用复制/移动构造函数的对象吗? - 代码日志