阅读Geekband的教材时发现C++中的const使用方式、范围均与C语言有些微差别,通过查阅资料和实验发现如下两处不同:
1.作用域不同
在C语言中,定义一个全局的const变量的作用域和一般的全局变量的作用域是一致的,也就是程序作用域。而在C++中,定义一个全局const变量的作用域是文件作用域,即仅在定义const变量的文件内有效。使用如下3段代码作为测试内容:
const1.cpp
const2.cpp
main.cpp
分别使用gcc和g++对上述3段代码进行编译和运行,发现上述3段代码在g++下正常编译且成功输出,输出值与预期一致,如下:
getSize()返回的值是const1.cpp中定义的MAX_SIZE=1024的结果,而getSize1()返回的值是const2.cpp中定义的MAX_SIZE=100的结果。
使用Gcc对上述代码进行编译,编译结果如下:
编译结果为链接错误,重复定义MAX_SIZE标识符。
在C++中,要想定义全局作用域的const变量,可以通过在定义的时候添加extern关键字来实现,即在cpp文件中定义const变量:extern const int MAX_SIZE = 1024;然后在头文件中包含const变量的声明:extern const int MAX_SIZE;
2.const含义不同
在C语言中const的含义是只读变量,而在C++中const的含义则是常量。在ASNI标准下,c/c++均不支持可变长度数组的声明和定义,因此,只有常量才能用来指定c/c++数组的大小。我们实验过程中,采用如下代码来进行测试:
varsizearray.cpp
使用命令行:g++ -Wall -g -ansi -pendatic varsizearray.cpp对代码进行编译,编译结果如下:
程序编译通过并产生预期的效果。相应的采用相应的C语言版本进行编译,代码及编译结果如下:
编译结果如下(不允许使用const变量作为数组的长度):
通过对c/c++版本的编译结果进行比对,不难发现c/c++对于const的解释上的不一致。