首页 > 解决方案 > 将相同的值分配给 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 并为iUB 分配一个新值,因为我们不允许更改 const 变量的值。但是,在上面的代码中,我实际上并没有改变i- 的值,所以,这仍然是 UB 吗?

标签: c++constantsundefined-behavior

解决方案


是的。还是UB。

尝试更改 const 变量是 UB,而不仅仅是分配值。

来自 N4296,第 1.9 节,第 4 段:

本国际标准中将某些其他操作描述为未定义(例如,尝试修改const对象的效果)。


推荐阅读