Если я это сделаю:
const char* const_str = "Some string";
char* str = const_cast<char*>(const_str); // (1)
str[0] = "P"; // (2)
Где (какая строка) точно является неопределенным поведением?
Я много искал это на SO, но не нашел ни одногоявный и точный ответ (или, по крайней мере, ни один, который я мог бы понять).
Также связано: если я использую внешнюю библиотеку, которая предоставляет такой тип функции:
// The documentation states that str will never be modified, just read.
void read_string(char* str);
Это нормально?написать что-то вроде:
std::string str = "My string";
read_string(const_cast<char*>(str.c_str()));
Поскольку я точно знаю, что read_string()
будет никогда попытаться написать str
?
Спасибо.