类中的赋值和构造
类中的赋值操作和构造容易使人混淆,加以区分,引以为戒:
我用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);
定要分清。
赐教!