Недавно я решил погрузиться в стандарт C ++ и проверить, правильно ли определены определенные фрагменты кода и где найти эти определения в стандарте.Поскольку стандарт довольно сложно понять правильно (особенно если вы к нему не привыкли), я хотел проверить, правильно ли мое предположение.
Я наткнулся на следующий пример (что, очевидно, является плохой идеей).Он прекрасно компилируется (с использованием g ++ 8.2.1), но SEGFAULT во время выполнения:
#include <iostream>
static const int staticInt = 23;
int main () {
int &localInt = const_cast<int &>(staticInt);
localInt = 11;
std::cout << staticInt << std::endl;
return 0;
}
Итак, я искал через стандарт (я использую рабочий проект на open-std btw)и нашел параграф 6.8.10:
Создание нового объекта в хранилище, которое занимает постоянный законченный объект со статическим, потоковым или автоматическим сроком хранения, или в пределах хранилища, которое такой объект const использовал длязанимают до того, как закончится его время жизни, приводит к неопределенному поведению.
Прав ли я, что этот параграф применим для данного примера?Если нет, то где еще мне посмотреть?