最近我决定深入研究C++标准,检查某些代码片段是否定义明确,以及在标准中找到这些定义的位置.由于标准很难做到(特别是如果你不习惯),我想验证我的假设是否正确.
我遇到了以下示例(这显然是一个坏主意).它编译得很好(使用g ++ 8.2.1)但执行期间SEGFAULTs:
#include <iostream>
static const int staticInt = 23;
int main () {
int &localInt = const_cast<int &>(staticInt);
localInt = 11;
std::cout << staticInt << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以,我搜索了标准(我使用open-std btw 上的工作草案)并找到了第6.8.10段:
在存储中创建一个具有静态,线程或自动存储持续时间的const完整对象占用的新对象,或者在这个const对象在其生命周期结束之前占用的存储内,会导致未定义的行为.
我是对的,本段适用于给定的例子吗?如果我不是,我还应该在哪里看?