Нет, стандарт не дает такой гарантии.Единственная гарантия в стандарте C ++ состоит в том, что возвращаемое значение указывает на массив char
с тем же содержимым, что и std::string
, плюс нуль-терминатор.
Таким образом, он будет соответствовать стандартам дляреализация для хранения своего внутреннего представления каким-либо другим способом, кроме C-строки, и выделения C-строки на лету при вызове c_str
, хотя я совершенно уверен, что ни одна широко используемая реализация STL на самом деле не делает этого.
Теперь, что касается C ++ 0x, я слышал (хотя сейчас затрудняюсь найти документацию по этому вопросу), что одним из изменений будет требование, чтобы std::string
работалв непрерывном хранилище (аналогичное требование уже существует для std::vector
).Таким образом, в этом случае вы можете получить доступ к диапазону от &str[0]
до &str[0]+str.length()-1
, как если бы это была C-строка без нулевого терминатора.