Где поведение undefined при использовании const_cast <>?

Если я это сделаю:

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 ?

Спасибо.

7
задан ereOn 4 April 2011 в 07:54
поделиться