C++和C语言中const关键字的区别

C++和C语言中const关键字的区别
**
1. 内存读取的区别
先来看下面的代码

const int m = 10;
int n = m;

C++中的const关键字更像是编译阶段的#define。
在C语言中,编译器会先到 m 所在的内存取出一份数据,再将这份数据赋给 n;而在C++中,编译器会直接将 10 赋给 m,没有读取内存的过程,和int n = 10;的效果一样。C++ 中的常量更类似于#define命令,是一个值替换的过程,只不过#define是在预处理阶段替换,而常量是在编译阶段替换.

C++ 对 const 的处理少了读取内存的过程,优点是提高了程序执行效率,缺点是不能反映内存的变化,一旦 const 变量被修改,C++ 就不能取得最新的值。

代码验证:
先来看C中的例子

  1 #include <stdio.h>
  2 int main(void)
  3 {
  4     const int n = 10;
  5     //将const int*强制转换成int*
  6     int* p = (int*)&n;
  7     *p = 100;
  8     printf("n=%d,*p = %d\n",n,*p);
  9     return 0;
 10 }

这段代码输出的结果是 n=100,*p = 100
再看C++中的例子:

  1 #include <iostream>
  2 using namespace std;
  3 int main(void){
  4     const int n = 10;
  5     int* p = (int*)&n;
  6     *p = 100;
  7     cout << n <<" " << *p << endl;
  8     return 0;
  9 }

这段代码输出的结果是10 100
本例想说明的是:
C语言对 const 的处理和普通变量一样,会到内存中读取数据;C++ 对 const 的处理更像是编译时期的#define,是一个值替换的过程。
2 作用域的区别
** C++中全局 const 变量的可见范围是当前文件 而在C语言中,const 变量和普通变量一样,在其他源文件中也是可见的**

由于 C++ 中全局 const 变量的可见范围仅限于当前源文件,所以可以将它放在头文件中,这样即使头文件被包含多次也不会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值