Effective C++学习笔记一(让自己习惯C++)

看了Effective C++ 感觉受益颇多,做些笔记,以便日后查看翻阅

一 让自己习惯C++

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

  C++高效编程守则视状况而变化,取决于你使用C++的哪一部分。

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

 1. 对于单纯常量,最好以const对象或enums替换#defines.关于enum hack的用法和意义,这里有篇博文讲的比较好。

2. 对于形似函数的宏(macros),最好改用inline函数替换#defines.

条款03:尽可能使用const

1.  将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象,函数参数,函数返回类型,成员函数本体。

2.  编译器强制实施bitwiseconstness,但你编写程序时应该使用”概念上的常量性”(conceptual constness).(bitwiseconst阵营的人相信,成员函数只有在不更改对象之任何成员变量(static除外)时才可以说是const。也就是说它不更改对象内的任何一个bit。)若要在const成员函数内更改某成员变量,解决办法是将这些变量声明为mutable的。

3.  当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复(先通过static_cast将non-const对象转为const对象调用const成员函数,再通过const_cast移除返回对象的const)。

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

1  为内置型对象进行手工初始化,因为C++不保证初始化它们。

2  构造函数最好使用成员初值列(memberinitialization list),而不要在构造函数本体内使用赋值操作(assignment)。初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同(C++有着十分固定的”成员初始化次序”。base classes更早于其derived classes被初始化,而class的成员变量总是以其声明次序被初始化)。

3  为免除”跨编译单元之初始化次序”问题,请以localstatic对象替换non-local static对象(函数内的static对象称为local static对象,其它static对象称为non-local static对象;C++对”定义于不同编译单元内的non-local static对象”的初始化次序并无明确定义,而C++保证,函数内的local static对象会在”该函数被调用期间””首次遇上该对象之定义式”时被初始化)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值