C语言和C++中const的区别

首先来看一个例子:

在C语言编译器和C++编译器中编译这段代码,看最后输出的结果。

int a = 10;
const *p = &a;
*p = 20;

printf("a = %d\n", a);

在C中运行的结果

a = 20

在C++中运行的结果

a = 10

为什么会导致在结果不同呢?

因为两者对const的处理机制不同。

C语言中对const的处理是这样的:在编译的时候遇到const变量时,是不会给这个变量单独分配空间的。

C++中遇到const变量,就会将原来的变量存到一个符号表中,这个时候会给这个变量单独分配一个内存空间,就拿上面的例子来说,编译器会把原来的a变量和它的值存放到一个符号表中,并且给a单独分配一个空间,让p指向这个空间,所以给*p赋值就是给这个新的空间赋值,与原来的a没有任何关系。

图示就是下面这样

   

一切对p进行的操作就是在新分配的空间中执行的,对原来的a没有关系,也不会改变a的值,所以C++中的const是真正的常量。

【注意】:c++中const可能会分配空间也可能不会分配空间

1、在const常量为全局的时候,并且在其他文件中需要用到这个常量的时候就会分配空间。

2、当使用&操作符取const常量地址的时候会分配空间

以上是我个人的理解,如有错误欢迎指正。

猜你喜欢

转载自blog.csdn.net/y____xiang/article/details/81588196