【C++】【常变量取地址问题】const修饰的常变量&volatile修饰用法详解(代码演示)

前言

大家好吖,欢迎来到 YY 滴 系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁

主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

目录

  • 如下面代码所示,const修饰的变量是常变量,具有常性;
  • 常变量底层是开空间的
  • 但其依然能够 通过找到它地址的方式直接修改它
cpp 复制代码
 int main()
{
    const int n = 10;

	int* p = (int*)&n;
	(*p)++;

	cout << n << endl;	//输出结果为10
	cout << *p << endl;//输出结果为11

	return 0;
}
  • 为什么会出现这样的结果呢?

  • 这就涉及到编译器的优化问题,编译器会把常量放到寄存器中/直接将其当作常量替换;

  • 如果我们不想出现这种错误,可以用一个关键字volatile修饰

  • volatile 修饰的变量,每次都要去内存取,就可以规避上面这种错误

cpp 复制代码
 int main()
{
	// volatile 修饰的变量,每次都要去内存取
	volatile const int n = 10;
	//n = 11;
	// 转换有安全隐患的
	int* p = (int*)&n;
	(*p)++;

	cout << n << endl;//输出结果为11
	cout << p << endl;//输出结果为11

	return 0;
}
相关推荐
不知几秋10 分钟前
配置JDK和MAVEN
java·开发语言·maven
没有bug.的程序员10 分钟前
Spring Cloud Gateway 路由与过滤器机制
java·开发语言·spring boot·spring·gateway
枫叶丹425 分钟前
【Qt开发】布局管理器(五)-> QSpacerItem 控件
开发语言·数据库·c++·qt
月下倩影时26 分钟前
ROS1基础入门:从零搭建机器人通信系统(Python/C++)
c++·python·机器人
_OP_CHEN29 分钟前
C++进阶:(八)基于红黑树泛型封装实现 map 与 set 容器
开发语言·c++·stl·set·map·红黑树·泛型编程
C1161137 分钟前
Jupyter中选择不同的python 虚拟环境
开发语言·人工智能·python
无敌最俊朗@42 分钟前
C++线程中detach和join的注意点
c++
努力努力再努力wz43 分钟前
【Linux进阶系列】:线程(下)
linux·运维·服务器·c语言·数据结构·c++·算法
qq_401700411 小时前
Qt键盘组合
开发语言·qt
lkbhua莱克瓦241 小时前
Java入门——Java跨平台的原理
java·开发语言·笔记·github