C语言中:
被const修饰的变量,仍然是变量。虽然不能用C语法给这个变量改变值,但他本质上还是变量。
C编译器会给它分配空间。
C中,const默认使用的是外部链接。
C++中:
被const修饰的变量,实际上已经是一个真正的常量了。
而且,当在定义该常量的文件内使用时,C++编译器是不给该常量分派内存空间的,常量只会存在于符号表内。但是以下两种情况例外:1、当该常量被extern修饰之后(如果想要在其他文件中使用,也必须用extern修饰),表示告诉编译器,这个常量要使用外部链接,即有其他的编译单元会用寻址的方法来引用它。C++会给该const常量分配空间。2、本文件中若引用了该const变量的地址,编译器也是会被给它分配空间的。
C++中const默认使用内部链接。
总之,C++中,是否为const分配空间要看具体情况.
如果加上关键字extern或者取const变量地址,则编译器就要为const分配存储空间.
C++中定义常量的时候不再采用define,因为define只做简单的宏替换,并不提供类型检查
内链接:编译器只对正在被编译的文件创建存储空间别的文件可以使用相同的表示符号或全局变量,C/C++中内连接使用static 关键字。
外链接:为所有被编译过的文件创建一片单独的存储空间。一旦空间被创建,连接器必须解决对这片存储空间的引用。全局变量和函数使用外部链接。通过extern关键字声明,可以从其他文件访问相应的变量和函数。