测试程序是
#include <iostream>
using namespace std;
class A
{public:
A (): I(0) {cout << "default construcot" << endl; };
explicit A (int i): I(i) {cout << "another construcot" << endl; };
A (const A& a): I(a.I) {cout << "copy constructor" << endl; }
A& operator = (const A& a)
{cout << "assignment operator" << endl;
if (this == &a) return *this;
I = a.I;
return *this;
}
void show () {cout << I << endl; };
private:
int I;
};
int main ()
{A a = A(1);
A b;
b = A(2);
a.show();
b.show();
return 0;
}
输出
another construcot
default construcot
another construcot
assignment operator
1
2
显示,与 'b' 不同的对象 'a' 是从 A(1) “直接”构造的,无需执行赋值运算符。但是复制构造函数也没有执行。为什么?在这种情况下,有没有办法强制执行赋值运算符?如果我写的话,我会期待这样的行为
A a (1);
但我想要
A a = A(1);
这必须不同于第一种情况。或不?
(事实上,当我有一个从 A 派生的类 B 并希望 A 的赋值运算符处理像 A a = B(...) 这样的声明时,就会出现问题。)