Этот вопрос касается поведения, которое я наблюдал при использовании const_cast
для создания char *
const char *
.Мне известно, что это приведение выполняется неявно, и t работает для меня, когда приведение выполняется неявно.
Проблемный код:
#include <cstdlib>
int main() {
const char * org_str = NULL;
org_str = const_cast<const char*>(getenv("ENV_VAR")); // PROBLEM !!
}
Согласно Справочная страница Linux getenv()
принимает const char *
и возвращает char*
.Итак, в соответствии с моим пониманием правильности констант, я могу без проблем выполнить приведение констант на char*
.
Итак, мой вопрос: почему const_cast
здесь дает мне UB (код падает) но, как и ожидалось, без const_cast
(неявное приведение) работает нормально (так что проблема должна быть с использованием const_cast
)?
Обратите внимание, я знаю, что неявное приведение - это путь сюдаВ этом посте мне нужен ответ специально для поведения, наблюдаемого здесь.
РЕДАКТИРОВАТЬ:
Поскольку ошибка не воспроизводится другими соратниками, я предполагаю, что это странная среда выполнения /проблема с компилятором.Но, дайте мне знать, есть ли упоминание о таких проблемах в стандарте.
Пока я принимаю ответ Майка.