面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const1.限定符声明变量只能被读 const int i = 5; int j = 0; …… i = j; //非法,导致编译错误 j = i; //合法 2.必须初始化 const int i = 5; //合法 const int j; //非法,导致编译错误 3.在另一个文件中引用const常量 extern const int i; //合法 extern const int j = 10; //非法,常量不可以被再次赋值 5.可以避免不必要的内存分配 #define STRING "abcdefg\n" const char string[] = "abcdefg\n"; …… printf(STRING); //为STRING分配了第一次内存 printf(string); //为string一次分配了内存,以后不再分配 …… printf(STRING); //为STRING分配了第二次内存 printf(string); …… 由于const定义常量从汇编的角度来看,只是给出了对应的内存地址, 而不是像#define一样给出的是立即数,所以,const定义的常量在程 序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个 拷贝。 6.可以通过函数对常量进行初始化 int value(); const int i = value(); 说:假定对ROM编写程序时,由于目标代码的不可改写,本语句将会无 效,不过可以变通一下: const int &i = value(); 只要令i的地址处于ROM之外,即可实现:i通过函数初始化,而其值不 会被修改。 7.是不是const的常量值一定不可以被修改呢? 观察以下一段代码: const int a = 5; // a是int常量,没有问题 int *p = (int*)&a; // p是指向a的指针,没有问题 *p = 6; //将p指向的地址储存的值修改为6,因为p并不是const int* 类型的,所以编译器不认为这块有问题 cout<<