https://blog.csdn.net/weixin_42187898/article/details/83116692
进化之后的const分析
1、C语言中的 const
const 修饰的变量是只读的,本质上还是变量。
const 修饰的局部变量是在栈上面分配的。
const 修饰的全局变量是再只读存储区分配的。
const 只在编译期有用,在运行期是没有用的。
const 修饰的变量不是真的常量,它只是告诉编译器在编译期间,const 修饰的变量不能出现在等号的左边。
const 使得变量只有只读属性。
const 将具有全局生命周期的变量放到了只读存储区。
const 不是真正意义上面的常量,enum 可以,枚举。
2、C++中的 const
C++在C的基础上对 const 进行了进化处理。
当碰到 const 时,在符号表中放入变量。-->> 关于符号表在:
https://blog.csdn.net/m0_37141848/article/details/103407529有详细的描述
当编译过程中遇到常量直接用符号表中的替换。
在编译过程中如果发生了下列的情况应该给常量分配空间:
对 const 常量使用了 extern 关键字。
对 const 使用了 & 运算符。
注意:虽然C++编译器为const常量分配了内存空间,但是不会使用其存储空间的值。
3、再总结:
C语言中的 const 变量是只读变量,会分配存储空间。
C++中的 const 常量(由只读变量变为真正的变量)才有可能分配空间。
-->> 当 const 常量为全局常量,并且需要在其他文件中使用的时候。使用&操作符对 const 常量取地址。
C++中对 const 常量类似于宏定义,但又有点不同:
const 常量由编译器处理,编译器对 const 常量进行编译器检查和类型检查。
宏定义由预处理器处理,单纯的文本替换。
4、最终的小结:
与C语言不同,C++中的 const 不是 只读变量。
C++中的 const 是一个真正意义上的常量。
C++编译器可能会为 const 常量分配空间。
C++完全兼容C语言中 const 常量的语法特性。