c++局部const变量的修改

c语言下对局部const的修改

void test() {
	const int m_b = 100; //伪常量。
	int *p = &m_b;
	*p = 200;
	printf("%d\n", m_b);
}

在c语言下,这段代码是可以修改变量m_b的值的,因为此时m_b是分配在栈上的一个变量,而不是分配在常量区。我们可以把这种变量称为伪常量。

c++下对局部const的修改

void test() {
	const int m_b = 100; 
	int *p = (int *)&m_b;
	*p = 200;
	cout << m_b << endl;
}

同样的代码,在c++环境下是否也能够达到修改m_b变量值的效果呢?
答案是否定的。但是这段代码可以编译运行,但是没有修改掉m_b的值。那么上述代码修改的是谁的值呢?
在c++下,写下 const int m_b = 100; 后,m_b不是被分配在栈上,而是在符号表中以键值对的方式存储,在此情况下,m_b是可以被当成变量的,它的值就是100.
而当我们对const修饰的局部变量取地址的时候,其实c++的编译器在内部帮我们做了一些事情。编译器给变量m_b分配了一个临时的内存空间temp。p指针指向的是temp,所以修改的其实是temp的值。

总结

在c语言下局部const是伪常量,而在c++下,局部const可以看成是个常量。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值