【Effective C++ 条款20-23 笔记】【以传const引用替换传值】【必须返回对象时,别妄想返回其reference】【将成员变量声明为private】

条款20:以pass-by-reference-to-const替换pass-by-value

意思是:参数传递最好用传const引用代替普通的传值

为什么呢?

  • 传引用可以直接将实参本体传递进函数,而不用调用各种构造函数以及析构函数(完成副本的创建及销毁);注意:效率的提高并不只是减少了一次副本对象的拷贝构造以及析构,副本内可能含有多个同样需要拷贝构造的对象也需要创建并销毁
  • 传const引用可以告诉函数,以只读的形式对待实参
  • 在形参是父类对象,实参是子类对象的时候,传值的方式会直接将实参进行对象切割,构造的副本完全的父类类型,该副本调用的成员方法和、使用的成员变量也完全是父类的

但是,对于内置类型、STL迭代器和函数对象,还是传值好一点

条款21:必须返回对象时,别妄想返回其reference

意思是:不要迷信传引用可以代替普通的传值方式

在条款20中说到:传引用的方式比传值高效。但是有些情况下,传值(比如返回一个新对象)相比于传引用(比如返回一个旧对象的引用)就很有必要

  • 不要返回指向局部对象的指针或引用
  • 不要返回一个建立在堆上的对象的引用(因为有可能无法delete)

条款22:将成员变量声明为private

假设有一个public成员变量和一个protected成员变量,但是最终取消了,那么:

  1. 所有使用该public成员变量的代码(不仅该class内、还包括class外的客户代码)都会被破坏
  2. 所有使用该protected成员变量的代码(不仅该class内、还包括所有使用它的子类代码)都会被破坏

这就导致需要程序员和客户都需要重新写代码,很恐怖

所以,将所有的成员变量声明为private,使用成员函数取控制、访问成员变量

条款23:宁以non-member、non-friend替换member函数

首先注意:能够访问private成员变量的函数只有class的成员函数加上友元函数

如果要在一个成员函数(可以访问private成员变量、也能调用private成员函数)和一个non-member non-friend函数之间做选择,很明显,后者更好地保护了class对内部成员的封装性,使用起来也更安全

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值