【C++】C++问题——显式构造函数、常量引用返回值、深浅拷贝

explicit构造函数

所有的单参数的构造函数都必须是explicit的,以避免后台的类型转换。否则,一些宽松的规则将允许在没有显示类型转换操作的情况下进行类型转换。

A a;
a = 37;

上面的代码构造了一个A对象a,并进行赋值。该赋值语句不能正常工作,因为在赋值符号右侧并不是另一个A对象。
然而,C++拥有宽松的规则,通常,单参数构造函数定义了一个隐式类型转换(implicit type conversion),该转换创建了一个临时对象,从而使赋值(或函数参数)变成兼容的。
在本例中,编译器试图将a = 37;转换成A temp(37); a = temp;
临时对象的构造也可以通过使用单参数构造函数来实现。使用explicit意味着单参数构造函数不能用来创建隐式临时对象。

参数传递小结

  1. 按值调用适用于不被函数更改的小对象
  2. 按常量引用调用适用于不被函数更改的大对象
  3. 引址调用适用于所有可以被函数更改的对象

按常量引用返回

如果返回的对象是类类型,使用按常量引用返回可以节省复制的开销。这里的const是指返回的对象自身不能修改。
如果你想从常量成员函数中通过引用返回this对象的一个成员,你应该使用常量引用来返回它,即const X& 。也就是说你想通过引用返回的东西如果从逻辑上来讲是this对象的一部分(与它是否在物理上嵌入在th

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值