条款1 尽量以const和inline取代#define
1、当这么做时 #define PI 3.1415
PI 在编译之前会被预处理器移走,而并没有进去符号表,当调试时,你能看到3.1415,但是找不到PI。
2、常量指针
常量指针:常量指针就是指向常量的指针,指针所指向的地址的内容是不可修改的。
如 const int *p;
int a=1;
int b=2;
p = &a;
*p = 3; //error 常量指针指向的内容不能被修改
p =&b; //ok 常量指针指向的地址可以被修改
3、指针常量
指针常量:指针常量就是是指针的常量,它是不可改变地址的指针,但是可以对它所指向的内容进行修改
如 int * const p = NULL;
int a = 1;
int b = 2;
p = &a;
p = &b; //error p不能被修改 指向的地址不能被修改
*p = b;//ok 内容可以被修改
4、指向常量的常量指针
如 const int * const p = NULL;
既不能修改指向 也不能修改内容
5、当需要定义一个class专属常量 可以这么做
/*----------------.h---------------------*/
class GamePlay
{
private:
//static const int NUM; error:只是定义,在声明之前不能使用,必须先初始化
static const int NUM = 4; //static:因为所有对象公用NUM const防止NUM被修改
int scores[NUM];
};
/*----------------.cpp--------------------*/
const int GamePlay::NUM = 4; //假如在.h文件未使用 可以在.CPP文件中初始化
当编译器不允许类内初始化时 可以改用枚举类型
如
class GamePlay
{
private:
enum { NUM = 5 };
int Score[NUM];
};
6、用inline代替宏命令
较小的程序推荐用内联函数,但是否真的内联是由编译器决定的。
条款2 用<iostream>代替<stdio.h>
不解释
条款3 尽量以new和delete取代malloc和free
后者只是分配和释放内存,对构造函数和析构函数一无所知,其中没有任何对象被初始化
更不要混合使用
条款4 尽量使用C++风格的注释形式
也就是用//俩杠 代替 /**/杠星星杠 因为后者在嵌套的时候会出现意外