我只是创建了一个类,像这样:
class GreatClass
{
public:
GreatClass(){cout<<"Default Constructor Called!\n";}
GreatClass(GreatClass &gc){cout<<"Copy Constructor Called!\n";}
GreatClass(const GreatClass &gc){cout<<"Copy Constructor (CONST) Called!\n";}
~GreatClass(){cout<<"Destructor Called.\n";}
GreatClass& operator=(GreatClass& gc){cout<<"Assign Operator Called!";return gc;}
const GreatClass& operator=(const GreatClass& gc){cout<<"Assign Operator (CONST) Called!";return gc;}
};
GreatClass f(GreatClass gc)
{
return gc;
}
在main()函数中,有两个版本:
版本 #1:
int main()
{
GreatClass g1;
GreatClass G = f(g1);
}
版本 #2:
int main()
{
GreatClass g1;
f(g1);
}
它们都生成相同的输出:
Default Constructor Called!
Copy Constructor Called!
Copy Constructor Called!
Destructor Called.
Destructor Called.
Destructor Called.
我不明白为什么我把
f(g1)
赋值给G
时,没有任何反应。在这一点上调用了哪个构造函数或运算符?谢谢。
operator=
。这是由标准指定的。形如A a2 = a1;
的内容是复制初始化,使用的是复制构造函数(而不是赋值运算符)。也可能会发生复制省略。 - huskerchad