首页 > 后端开发 > C++ > 正文

为什么通过非常量指针修改常量会产生未定义的行为?

Linda Hamilton
发布: 2024-10-29 05:31:02
原创
826 人浏览过

Why Does Modifying a Constant through a Non-const Pointer Produce Undefined Behavior?

通过非常量指针修改常量:深入研究未定义的行为

在提供的代码片段中,您表达了对该行为的困惑通过非常量指针 (w) 修改常量整数 (e):

<code class="cpp">const int e = 2;

int* w = (int*) &e;  // Casting to remove const-ness
*w = 5;            // Modifying the value pointed to by w</code>
登录后复制

进行此修改后,您会观察到:

  • 显示 w 指向的值 (cout w
  • 然而,显示 e (*cout << e << endl;) 的值令人惊讶地输出 2,它的原始值。

您进一步注意到w 指向的地址与 e 的地址相同 (cout cout w 进行了修改,e 仍然保持不变。

此行为源于通过非修改常量时出现的未定义行为。 -常量指针。一旦进行此类修改,代码就会进入未定义的行为区域,该区域变得不可预测并取决于具体的实现细节。

在这种情况下,通过 w 进行的修改似乎会影响e 在运行时的临时副本,而原始 e 保持不变。原因是 e 被视为编译时常量,并且其值被硬编码到二进制代码中。因此,对 w 的任何运行时修改都不会影响原始 e

此行为特定于所使用的实现,不应依赖。通过非常量指针修改常量数据被认为是一种不好的做法,应该避免。正确的方法是使用非常量引用或创建要修改的数据的非常量副本。

以上是为什么通过非常量指针修改常量会产生未定义的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!