Я знаю, что приведение константного указателя к неконстантному типу может быть неопределенным поведением.
Это недоразумение.
Указатели на константное приведение никогда не приводят кнеопределенное поведение.Разыменование указателя не-const
, полученного путем const_cast
-ing указателя const
на объект const
, также не является неопределенным поведением, если исходный объект используется в режиме только для чтения.Это не определенное поведение, если вы пытаетесь записать объект.
int const i = 10;
int const* p1 = &i;
int* p2 = const_cast<int*>(p1); // OK.
std::cout << *p2; // Still OK.
*p2 = 20; // Not OK.
Учитывая это, ваш второй блок кода в порядке.Не существует неопределенного поведения, так как исходный объект не является const
объектом.
С Стандарт, Раздел 5.2.11, Выражения / Константное приведение :
Результат указателя const_cast
относится к исходному объекту.