C++与C中的const有什么区别

  • 众所周知,在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也是值替换,可见范围也仅限于当前文件。
(以上区别不一定全面,如有不全,还望修正)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值