条款1:视C++为一个语言联邦
C是多种范式汇集的语言,包括C的过程、C面向对象、Template泛型(STL模板库)、模板元编程、lambda。(后面自己补充可能由曲解原文意思)
条款2:尽量以const、enum、inline替换#define
单纯变量用const或enum替换define,形势函数的宏用inline函数替换。
class ttt{
enum{NumTurns=5};
int scores[NumTurns];
}
用枚举替换更像define,因为枚举和define均不可取地址,而const的变量可以被取地址。
条款3:尽可能使用const
const char *p;
指针非常量,数值为常量--我还是喜欢声明时把*和变量放一起,构成一个整体,这样也容易理解,const就是对这个整体修饰的这个整体不可变也就是*p也就是值不可变。char * const p;指针常量,值非常量 对函数指定const:void a() const;此时函数不可调用非const成员(可以读非const数据成员),如某个数据成员需要被const方法操作,可以用mutable修饰:mutable boos bbb;
const char& operator[](std::size_t position)const {
XXXXX
return pText[position];
}
char& operator[](std::size_t position){
return const_cast<char&>(stati_cast<const CTextBlock&>(*this)[position]);
}
避免代码重复可用const_cast去掉const符号。先将非const调用过程的this转换为const class object调用,实现对const函数调用,并将返回值的const去掉。注意可以用非const函数使用此方式,不要用const函数通过此方式调用非const函数。
条款4:确定对象使用前已先被初始化
内置(class、str