C++对象实例化与分配

And*_*rew 12 c++ constructor default-constructor copy-assignment

这有什么区别:

TestClass t;
Run Code Online (Sandbox Code Playgroud)

还有这个:

TestClass t = TestClass();
Run Code Online (Sandbox Code Playgroud)

我希望第二个可能会调用构造函数两次然后调用operator =,而是调用构造函数一次,就像第一次一样.

Luc*_*ore 15

TestClass t;
Run Code Online (Sandbox Code Playgroud)

调用默认构造函数.

TestClass t = TestClass();
Run Code Online (Sandbox Code Playgroud)

是一个复制初始化.它将调用默认构造函数TestClass(),然后调用复制构造函数(理论上,复制需要复制省略).这里没有任务.

还有直接初始化的概念:

TestClass t(TestClass());
Run Code Online (Sandbox Code Playgroud)

如果要使用赋值运算符:

TestClass t;
TestClass s;
t = s;
Run Code Online (Sandbox Code Playgroud)

  • 对复制构造函数的调用可能会被优化掉(通常是). (7认同)
  • @Mahesh - 这只是RVO的行动 (2认同)