条款1:视C++为语言联邦
1、C:blocks\statements\preprocessor\built_in data types\array\pointerObject-oriented c++,
2、c with classes:class,encapsulation,inheritance,polymorphism,virtualfunction(动态绑定)。。。
3、Template C++:generic programming 的一部分,良好的守则,唯template适用。
4、STL,是个template程序库,containers,iterators,algorithms,functions objects
条款2:尽量以const,enum,inline替换#define
用#define的坏处
1、无法追踪错误,
#define ASPECT_RATION 1.635
错误信息会提示1.635
解决之道,const double AspectRation =1.635;
2、编译器会盲目的替换为1.635导致目标代码出现多分1.635,改用变量只存在一份。
3、两种特殊的情况需要说明
3.1 常量指针,由于常量定义式,通常被放在头文件之内,有必要将指针(而不是指针所指的数据)声明为const,
const std::string authorname("swfa1");
3.2 class的专属常量,为了将作用域scope限定在class范围内,必须要让他成为class的一个成员(member)而为确保此常量最多只有一个实体,必须将它声明为static
class GamePlayer
{
private:
static const int NumTurns = 5;//常量声明
int scores[NumTurns]; //可以使用该常量
};
以上是声明式,如果需要,。可以有以下定义式,但是一般情况只要不使用地址,就不需要定义式。
const int GamePlayer::NumTurns;//NumTurns 定义
这个式子在.cpp中出现。
#define不能创建一个class范围内的专属变量。除非#udef
enum 不能取地址,const可以,#define不可。
inline函数:
条款三:尽可能使用const
const:告诉编译器这个变量是不可改变的。约束
const * 是指针常量,指针是常量
*const 是指向常量的指针。被指物是常量