C++ 对象实例化与赋值

这有什么区别:

TestClass t;

还有这个:

TestClass t = TestClass();

我预计第二个可能会调用构造函数两次,然后是 operator=,但它只调用了一次构造函数,就像第一个一样.

I expected that the second might call the constructor twice and then operator=, but instead it calls the constructor exactly once, just like the first.

推荐答案

TestClass t;

调用默认构造函数.

TestClass t = TestClass();

是一个复制初始化.它将调用 TestClass() 的默认构造函数,然后调用复制构造函数(理论上,复制受复制省略约束).此处不进行任何分配.

is a copy initialization. It will call the default constructor for TestClass() and then the copy constructor (theoretically, copying is subject to copy elision). No assignment takes place here.

还有直接初始化的概念:

TestClass t(TestClass());

如果你想使用赋值运算符:

If you want to use the assignment operator:

TestClass t;
TestClass s;
t = s;

相关文章