类中的赋值和构造

类中的赋值操作和构造容易使人混淆,加以区分,引以为戒:

我用string类为例:

string str1 = "hello world"; 
string str2 = str1; 

有“=”不一定就是赋值操作,其实,上边的string str2 = str1,就不是赋值操作,它等效下边的语句:

string str1 ("hello world"); //调用的是构造函数 
string str2 (str1); //调用的是拷贝构造函数 
你看到的赋值,其实是调用了拷贝构造函数
回来,再例如:

string str2; 
str2 = str1;
这才是赋值操作,等效于:

string str2(“”); 
str2.operator=(str1); 
即就是:
string str2; //调用参数默认为空串的构造函数:string str2(“”); 
str2 = str1; //调用str2的赋值操作:str2.operator=(str1); 
定要分清。

赐教!





原文地址:https://www.cnblogs.com/melons/p/5791843.html