c++ - 将相同的值分配给 const 变量是否会导致 C++ 中的 UB?
问题描述
给定以下 C++ 代码:
#include <iostream>
int main()
{
const int i = 1;
*const_cast<int*>(&i) = 1; // Not allowed but doesn't do anything?
std::cout << i << "\n";
}
问题:上面的代码是否调用了 UB(未定义的行为)?我知道放弃 const 并为i
UB 分配一个新值,因为我们不允许更改 const 变量的值。但是,在上面的代码中,我实际上并没有改变i
- 的值,所以,这仍然是 UB 吗?
解决方案
是的。还是UB。
尝试更改 const 变量是 UB,而不仅仅是分配新值。
来自 N4296,第 1.9 节,第 4 段:
本国际标准中将某些其他操作描述为未定义(例如,尝试修改
const
对象的效果)。
推荐阅读
- c# - 如何转换 ObservableCollection
返回 ObservableCollection ? - javascript - 当我运行 nodemon 服务器时,我收到错误“bad auth Authentication failed. [nodemon] app crashed - waiting for file changes before start...”
- javascript - Chrome 扩展:如何正确地将脚本添加到 popup.html 并使用 localStorage
- c++ - CMake意外地将最后一个文件名添加到foreach中的可执行文件中
- drupal - 在 Drupal8 中组织大量图像的最佳解决方案是什么?
- kotlin - 使用来自 github 的依赖项执行 kotlin -script.kts
- c# - 如何在 nancy 模块一侧保留成员变量或属性?
- java - ListItem 没有响应 Android 中 ArrayAdapter 中的 clickEvents?
- ios - 从 WKWebView (Swift, iOS) 中的响应中解析 json 对象
- scala - 一个例子怎么能有两个同名的包