《Effective C++》之让自己习惯 C++

 

目录

条款1:视C++为一个语言联盟

条款2:尽量以 const、enum、inline 替换 #define

条款3:尽可能使用 const 

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


条款1:视C++为一个语言联盟

1、C++ 分为四个次语言,C、object-oriented C++、Template C++、STL。

2、四个语言都有自己的规约,使用不同次语言时遵守不同的守则会使得开发更高效。

3、对于内置类型而言,pass-by-value效率高于pass-by-reference。对于用户自定义类型而言,pass-by-reference效率高于pass-by-value。

条款2:尽量以 const、enum、inline 替换 #define

1、定义常量时尽量使用 const、enum 代替 #define。

2、定义不可取址、不可引用的常量时尽量使用 enum 代替 #define。

3、定义类似函数的宏时尽量使用 inline 代替 #define。

4、在防止头文件重复包含时依然使用 #define。

条款3:尽可能使用 const 

1、如果 const 出现在 * 号左边,表示被指物是常量。如果 const 出现在 * 号的右边,表示指针自身是常量。

2、const Widget *pw 和 Widget const *pw 两种形式效果一样,都是指向常量 Widget 对象。

3、const std::vector<int>::iterator 等价于 T* const,std::vector<int>::const_iterator 等价于 const T*。

4、const 成员函数可以使用 mutable 摆脱 const 的约束。

5、当 const 和 non-const 成员函数有着实质的等价实现时,令 non-const 版本调用 const 版本可避免代码重复。 

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

1、为内置类型进行手动初始化,因为 C++ 不保证初始化它们。

2、构造函数最好使用初始化成员列表,而不要在构造函数内使用赋值操作。初始化列表列出的初始化顺序应该和类体中成员变量定义顺序保持一致。

3、为避免 “跨编译单元之初始化次序” 问题,请使用 "local static" 对象替换 "non-local static" 对象。

 持续更新......

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值