当默认构造函数为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构造函数。