Effective C++学习笔记

博文小编

2021-11-22

【以下文章来源于畅游码海 ,作者CallMeEngineer】

一、让自己习惯C++

条款01:视C++为一个语言联邦

C++并不是一个带有一组守则的一体语言:他是从四个次语言( C、Object-Oriented C++、Template、STL ) 组成的联邦政府,每个次语言都有自己的规约。记住这四个次于语言你就会发现C++容易了解得多。

条款02:尽量以const,enum,inline替换 #define


以上句为例,是通过预处理器处理而不是编译器处理,有可能 ASPECT_RATIO没进入记号表内,于是如果出现了编译错误,那么编译器会提示错误信息是 1.653而不是ASPECT_RATIO ,你会感到非常困惑。

解决方法是用常量替换宏

这样编译器就可以看到ASPECT_RATIO ,而且使用常量会使代码量较小,因为预处理器只会盲目的替换而出现多份 1.653

string对象通常比char* 更好一点

对于class的专属常量,为了限制作用域在class内,并且防止产生多个实体,最好使用static

1.如果你的编译器支持在类内对const static 整数类型声明时获初值,则使用
2.如果不支持,则在类内定义,在对应的实现文件中赋值

如果你需要在编译器就使用一个class常量值,则应最好改用枚举类型enum,且枚举不能用来取地址,不会为它分配额外的存储空间

对于形似函数的宏,最好改用inline的模板函数

条款 03:尽可能使用const

条款 04:确定对象被使用前已先被初始化

对于内置类型要进行手工初始化

构造函数最好使用成员初值列表,不要在构造函数中使用赋值操作来初始化,而且初值列表列出的成员变量次序应该和在class中声明的次序一样,因为声明次序就是C++保证的初始化次序

对于static对象,在跨编译单元之间的初始化次序是不能确定的,因为C++只保证在本文件内使用之前一定被初始化了

举例(使用如下方式可以解决这个问题即以loacl static对象替换non-local static对象):

二、构造/析构/赋值运算























《Effective C++:改善程序与设计的55个具体做法(第三版)中文版》
Scott Meyers 著
侯捷 译

一本轻薄短小高密度的“专家经验累积”

国际影响力波及了整个计算机技术出版领域

本书不是读完一遍就可以束之高阁的快餐读物,也不是用以解决手边问题的参考手册,而是需要您去反复阅读体会的,C++是真正程序员的语言,背后后精神的思想与无以伦比的表达能力,这使得它具有类似宗教般的魅力。希望这本书能够帮您跨越C++的重重险阻,领略高处才有的壮美风光,做一个成功而快乐的C++程序员。

(快快扫码抢购吧!)

读者评论

相关博文

  • 社区使用反馈专区

    陈晓猛 2016-10-04

    尊敬的博文视点用户您好: 欢迎您访问本站,您在本站点访问过程中遇到任何问题,均可以在本页留言,我们会根据您的意见和建议,对网站进行不断的优化和改进,给您带来更好的访问体验! 同时,您被采纳的意见和建议,管理员也会赠送您相应的积分...

    陈晓猛 2016-10-04
    4725 707 3 7
  • 迎战“双12”!《Unity3D实战核心技术详解》独家预售开启!

    陈晓猛 2016-12-05

    时隔一周,让大家时刻挂念的《Unity3D实战核心技术详解》终于开放预售啦! 这本书不仅满足了很多年轻人的学习欲望,并且与实际开发相结合,能够解决工作中真实遇到的问题。预售期间优惠多多,实在不容错过! Unity 3D实战核心技术详解 ...

    陈晓猛 2016-12-05
    2901 35 0 1
  • czk 2017-07-29
    4726 28 0 1