提问人:A J 提问时间:7/18/2022 更新时间:7/18/2022 访问量:98
复制构造函数究竟是什么时候调用的?[复制]
When exactly is copy constructor called? [duplicate]
问:
这个问题在这里已经有答案了:
c++: MyClass x(1,2,3) vs MyClass x = MyClass(1,2,3) [duplicate] (1 个答案)
Radio r = Radio(“PSR”, 100.8) 和 Radio(“PSR”, 100.8) 有什么区别?[复制] (1 个回答)
存储重载运算符的结果时不调用复制/移动构造函数+ (1 个答案)
去年关闭。
我有以下代码:
#include<iostream>
using namespace std;
class A{
private:
int x;
public:
A(){x=10;}
A(int m){x=m; cout << "int m constructor" << m << endl;}
A(A& a){cout << "copy constructor:"<<a.x<<"\n"; x=a.x;}
A(A&& a){cout <<"move constructor:"<<a.x<<"\n"; x=a.x;}
};
int main(){
A a(100);
A b = a;
A d = A(30);
}
输出以下内容:
int m constructor100
copy constructor:100
int m constructor30
我期待它输出
int m constructor100
copy constructor:100
copy constructor:30
因为调用了构造函数 ()。
但是编译器以某种方式优化了它?
也打印.
这里是否发生了一些编译器优化?A(30)
A d = A(A(30))
int m constructor30
答:
0赞
Goswin von Brederlow
7/18/2022
#1
你的最后一行,是强制性的复制省略。A d = A(30)
A d = A(A(30))
评论
A d = A(30)
d
A d = A(30)
被计算为好像是 ,因为 C++ 假定默认构造一个对象只是为了立即为其分配其他东西是没有好处的。A d(30)