复制构造函数的总结

string a=“abc”;
调用的是复制构造函数还是普通构造函数啊?c++primer上写的是copy-initialization,可是很多人交流都说是隐士调用了普通的构造函数。
如果是调用复制构造函数的话,书上说是先用指定构造函数创建一个临时对象,按后用复制构造函数将那个临时对象复制到正在创建的对象,
是不是就似乎先string temp(”abc“),然后再string a =temp;

 

复制构造函数和重载=号的区别   复制构造函数是复制,而=号是赋值

一。如果是初始化的时候,
string b= “123”;
string a=b;
这样是调用了复制构造函数,也就是调用了string(const string&),应该是a调用了b吧比如是a(string& b),但是=号呢?也就是遇见了=号,就调用了复制构造函数?
二。如果是赋值,则是调用重载=号,这个比如:
string b= “123”;
string a;
a=b;//调用了重载的=号。

 

如何使用explicit 修饰构造函数,那么将不允许隐式的调用构造函数,比如:

class aa{

aa(int a);

};

aa(3);//正确

aa =3;//显示的调用构造函数,仍然正确。

 

class aa{

explicit  aa(int a);

};

aa(3);//正确

aa =3;//隐士的调用构造函数,错误。

 

 

1.myclass x =y

x的复制构造函数被调用,y的引用被作为参数传递进来。

2.fun(y)

a的复制构造函数被调用,y的引用被作为参数传递进来。

3.y = fun()

返回的临时对象首先调用复制构造函数,fun里面被返回的对象的引用作为参数传递进来。y=,记住,这是复制,调用了 = 号重载 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值