常量在C++里面是一个很重要的概念,有很多细节的地方很容易忽略,这里我根据《C++编程思想》总结了一下。
1.出现的历史
常量最普遍的用法是值替代,在C语言里我们用宏来定义常量:
#define MAX 100
但这是预编译的,也就是说在编译时只是简单宏展开,并不检查宏的语法是否正确。所以在C++里引入了const来定义常量,增加了编译时的检查安全性得到了提高。(C99 里面加入了const关键字)
const int size=100;
int array[size];
size在编译时就知道是多少了。常量通常是保存在符号表里面的,没有自己的内存地址,但我们可以强制编译器为常量分配内存
const int i=100;
long address=(long)&i;
但要注意的是const可以用于集合,但必须保证编译器不会复杂到把一个集合保存到它的符号表中,所以必须分配内存。在这种情况下,const意味着"不能改变的一块存储空间"。然而,不能在编译期间使用它的值,因为编译器在编译期间不需要知道存储的内容。
const int i[]={1,2,3,4};
int f[i[3]]; //complie error
还有C++中默认const是内部连接的,生存期为这个程序的运行时间。
2.指针中常量