-
众所周知,在C/C++中const关键字修饰一个只可读数据类型。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。
但是在C/C++中的const也有一些区别的去看下列示例代码:
C++方式编译(.cpp)
#include<iostream>
int main()
{
const int data = 5;
int *p = (int*)&data;
*p = 50;
std::cout << data << std::endl;
return 0;
}
此程序在VS环境中输出为5
当使用C语言的方式编译时(.c)
#include<stdio.h>
int main()
{
const int data = 5;
int *p = (int*)&data;
*p = 50;
printf("%d\n",data);
return 0;
}
输出结果为50;
这是为什么呢?
-
因为在C语言中,编译器会先到 data 所在的内存取出一份数据赋给 p;而在C++中,编译器会直接将 50 赋给p,没有读取内存的过程。C++中的机制更类似于#define命令,是一个值替换的过程,只不过#define是在预处理阶段替换,而常量是在编译阶段替换。
C++ 对 const 的处理少了读取内存的过程,优点是提高了程序执行效率,缺点是不能反映内存的变化,一旦 const 变量被修改,C++ 就不能立即更新数据。(在项目开发中既然设定为了const,谁又会去修改呢,只是为了防止不小心的操作而已。)
总结:
C++ 中的 const 变量虽然也能使用&获取地址,但是在使用时却更像编译时期的#define;#define也是值替换,可见范围也仅限于当前文件。
(以上区别不一定全面,如有不全,还望修正)