当默认构造函数为private时,像Foo t3 = Foo::construct(true);这样的c++行如何工作?我的假设(这显然是不正确的)是在赋值运算符之后调用了默认构造函数。该假设必须是不正确的,因为默认构造函数是私有(private)的,无法调用。

一个具体的例子:

class Foo {
private:
   Foo() {}
   bool bar;
public:
   Foo(bool t): bar(t) {}
   static Foo construct(bool t) {
      Foo temp; //calling private constructor;
      temp.bar = t;
      return temp;
   }
}

用于实例化此类的测试方法如下所示:
int main() {
   //Foo t1; //Not allowed, compile error, Foo() is private
   Foo t2(true); //Constructor, valid use
   Foo t3 = Foo::construct(true); //It works! Why?
   return 0;
}

当实例化t3时,幕后到底发生了什么?

最佳答案

Foo t3 = Foo::construct(true); //It works! Why?

因为这不是默认的初始化,后面是赋值,而是copy initialization



因此,根据以下声明:



还有这个:



在您的情况下,将使用隐式声明的move构造函数。

10-04 14:55
查看更多