小编Seb*_*per的帖子

C++ 17 Standard - 抛弃静态const

最近我决定深入研究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对象在其生命周期结束之前占用的存储内,会导致未定义的行为.

我是对的,本段适用于给定的例子吗?如果我不是,我还应该在哪里看?

c++ const-cast language-lawyer c++17

5
推荐指数
1
解决办法
270
查看次数

标签 统计

c++ ×1

c++17 ×1

const-cast ×1

language-lawyer ×1