C++和C语言对于const的区别

本文探讨了C++中const的真常量与假常量特性,比较了与C语言的区别,涉及const的数据类型安全性、调试性、作用域和内存分配。重点讲述了const在不同情况下的内存分配策略,并通过实例说明了C++中const的复杂性。
摘要由CSDN通过智能技术生成

在C++中const是一个真的常量,但是C语言中const是一个假的常量

const int a = 10; 
int *p = (int *)&a; 
*p = 20; 
printf("a = %d\n",a);

上述代码在C语言中,a = 20,但是C++ 中 a = 10;

c++中定义const时候,a放入到符号表中使用,当定义p指向a的时候,C++重新为a分配了一个空间,将p指向了新的a的空间,从而修改p的值,和新空间中a的值,但是符号表中a的值没有发生变化,如下图所示:

const 和#define 区别

1、const 常量有数据类型,因此有类型安全检查,而宏#define是没有的。宏仅仅是替换,预处理过程会把源代码出现宏标识符替换成宏定义时的值。
2、有些集成化的调试工具能对const常量进行调试,对宏常量不能调试。
3、const定义的常数是变量,带类型,但是#define定义的只是个常数,不带类型
4、const是在编译运行时候起作用,define是在编译的预处理阶段起作用
我们来看下面这块代码

int a, b;  
a = b = 5;  
int array[a + b];
// 这在Windows下C语言和C++都是不能实现的,但是Linux的内核的gcc支持
const int a = 5;  
const int b = 5;  
int array[a + b]; 
//在C语言中是不支持的,但是C++中是支持的,  
//在这里,C++中const实现和#define是一样的
void fun() 
{ 
	#define c 10  
	const d = 20;
} 
void fun1() 
{
	//在这里c是可以执行的,因为预编译为10,但是d不可以  //const有作用域 
	printf("%d,%d\n",c,d);
}
结论:

C语言中的const是只读变量,存在自己的空间。
C++中const可能分配空间,可能不分配空间,当使用&取地址符的时候,才会分配空间。或当定义const为全局变量时候,被其他文件使用的时候,分配空间,const分配内存的时机:编译器编译时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值