1. C中的const
C中const变量只是只读变量,有自己存储空间。可能被存放在 栈、堆、数据段,所以可以修改。
2. C++中const
可能分配空间,也可能不分配空间。
当 const 为全局时,并且需要在其他文件中使用,或当使用 & 操作符取 const 常量的地址时,会分配空间。
3. C++中const 和 #define 的联系
(1)C++编译器堆const常量的处理
当碰见常量声明时,在符号表中放入常量。
编译过程中若发现使用常量则直接以符号表中的值替换
编译过程中若发现对const修饰的常量使用了 extern 或者 & 操作符,则给对应的常量分配存储空间。
(2)const 和 #define 的区别
const 是在编译阶段处理, #define 是在预编译处理,
const 有作用域,类型检查。 #define 只是纯粹的文本替换,作用域从定义开始直到文末或 #undef。
int a = 1; int b = 2; int c[a + b]; 上面这种定义是错误的(gcc除外)。 const int a = 1; const int b = 2; int c[a + b]; 这样在C++中是正确的。 原因是当 C++ 编译器扫描到 const int a = 1; const int b = 2; 会将 a ,b 放到 符号表中。 当扫描到 int c[a + b]; 会直接将 a,b从符号表中替换, 也成了 int c[1 + 2]; 所以 #define 和 const 在 C++中类似。