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

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

前言

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

主要内容含:

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

一.知识点讲解

 int main()
{
    const int n = 10;

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

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

  return 0;
}
  • 为什么会出现这样的结果呢?
  • 这就涉及到编译器的优化问题,编译器会把常量放到寄存器中/直接将其当作常量替换;
  • 如果我们不想出现这种错误,可以用一个关键字volatile修饰
  • volatile 修饰的变量,每次都要去内存取,就可以规避上面这种错误
 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;
}

二.例题

例题:

C++和C对const处理的差别

  • 只有C++中才会有这种处理


目录
打赏
0
3
3
0
48
分享
相关文章
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
144 2
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
65 3
【C++】map、set基本用法
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
158 5
|
2月前
|
C++
第十三问:C++中静态变量的用法有哪些?
本文介绍了 C++ 中静态变量和函数的用法及原理。静态变量包括函数内的静态局部变量和类中的静态成员变量,前者在函数调用间保持值,后者属于类而非对象。静态函数不能访问非静态成员,但可以通过类名直接调用。静态链接使变量或函数仅在定义文件内可见,避免命名冲突。
91 0
|
4月前
|
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
57 0
|
6月前
|
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
57 1
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
156 0
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
70 0
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等