c++满载赋值操作符的一些疑问
c++重载赋值操作符的一些疑问?
大家好
下面这段代码我有点疑问,
对于上面一段代码 执行到 a1 = 5 时候 为什么会有一个Constructor 5 和Destructor 5
这里a1 已经调用过构造函数了,这次不应该直接调用 operator=吗?
谢谢大家,有点不明白。
------解决方案--------------------
调用的是构造函数,在构造函数前加上explicit再试试
------解决方案--------------------
a1 = 5;
会有个临时对象 A temp(5);用完就扔了
------解决方案--------------------
你的赋值操作符参数类型是const A &,而你用的是5,这里面发生了一个隐式类型转换,5->A。
如果不想发生隐式类型转换:
A(int i = 0) 改为 explicit A(int i = 0)
a1 = 5; 改为 a1 = A(5);
------解决方案--------------------
a1 = 5;
这里会调用构造函数将5构造成一个临时A类型变量,然后将这个临时变量赋值(=)给a1.赋值完成后,析构该临时变量。
所以会出现你说的情况。
------解决方案--------------------
operator=的参数类型是const A& 所以会调用构造函数,构造一个A的对象。
你试试 a1 = a2; 就不会构造、析构了
------解决方案--------------------
你赋值的是一个int 而不是一个对象c++可以将一个数值赋给一个对象这么写是没错的,但会生成与一个临时对象,所以会先调用构造函数赋值完成后这个临时对象被释放
大家好
下面这段代码我有点疑问,
class A {
public:
A(int i = 0) {
a = i;
cout << "Consturctor " << a << endl;
}
A(const A&) {
cout << "copy constructor " << endl;
}
A &operator=(const A& ra) {
cout << "= operator " << endl;
return *this;
}
~A() {cout << "Destructor " << a << endl;}
void print(){ cout << a << endl;}
private:
int a;
};
void main()
{
A a1(1), a2(2);
a1 = 5;
}
输出
Consturctor 1
Consturctor 2
Consturctor 5
= operator
Destructor 5
对于上面一段代码 执行到 a1 = 5 时候 为什么会有一个Constructor 5 和Destructor 5
这里a1 已经调用过构造函数了,这次不应该直接调用 operator=吗?
谢谢大家,有点不明白。
------解决方案--------------------
调用的是构造函数,在构造函数前加上explicit再试试
------解决方案--------------------
a1 = 5;
会有个临时对象 A temp(5);用完就扔了
------解决方案--------------------
你的赋值操作符参数类型是const A &,而你用的是5,这里面发生了一个隐式类型转换,5->A。
如果不想发生隐式类型转换:
A(int i = 0) 改为 explicit A(int i = 0)
a1 = 5; 改为 a1 = A(5);
------解决方案--------------------
a1 = 5;
这里会调用构造函数将5构造成一个临时A类型变量,然后将这个临时变量赋值(=)给a1.赋值完成后,析构该临时变量。
所以会出现你说的情况。
------解决方案--------------------
operator=的参数类型是const A& 所以会调用构造函数,构造一个A的对象。
你试试 a1 = a2; 就不会构造、析构了
------解决方案--------------------
你赋值的是一个int 而不是一个对象c++可以将一个数值赋给一个对象这么写是没错的,但会生成与一个临时对象,所以会先调用构造函数赋值完成后这个临时对象被释放