改善程序与设计的55个具体做法 day8

 

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

即 以const引用 替换值传递。

采用引用传递参数时,底层往往是用指针方式实现,因此参数传递内置类型时,采用值传递方式往往效率更高。

 

如果函数参数是基类对象(值传递),传递实参时如果传递的是派生类对象,则可能会产生【切割现象】;而如果形参是const 基类引用,则不会有这个问题。

 

请记住:

a 尽量以const引用 代替 值传递,通常前者效率较高,并且没有切割问题。

b 以上规则并不适用于内置类型、STL迭代器、函数对象,对他们而言,值传递往往比较高效。

 

 

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

函数返回(局部)对象时,往往意味着更高的性能代价,即至少会调用一次构造函数、一次析构函数。

 

除了返回局部对象,函数还可以返回一个在堆上new的对象,但问题是该对象可能会delete困难,即在某些时候往往没有何时的释放地址供delete使用。

另一种返回对象的方式是返回一个局部static对象,而当使用这两个返回对象做比较时,则可能比较结果用于为真。

 

所以,一个【必须返回新对象】时,那就让函数返回一个新的临时对象。

 

但是,永远不要让函数返回一个临时对象的引用 或 临时对象的指针。

 

 

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

假设有一个public成员变量,当取消这个成员变量后,由于这个成员变量被访问的地方可能会有很多,因此会做很多处修改。

假设有一个protected成员变量,当取消这个成员变量后,会影响到派生类、友元函数、友元类等各处。

因此只有private成员变量才能做到最好的封装。

 

请记住:

a 切记将成员变量声明为private。这样可赋予客户访问数据的一致性,可细微划分访问控制、允诺约束条件获得保证,并提供class作者以充分的实现弹性。

b protected并不比public更具有封装性。

 

posted on   崔好好  阅读(191)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示