Будет ли std::string всегда заканчиваться нулем в С++ 11?

В публикации 2008 года на своем сайте Херб Саттер заявляет следующее:

Существует активное предложение по дальнейшему ужесточению этого в С++ 0x и требует отказа от нулевой последовательности и, возможно, запрета реализации копирования на запись, по причинам concurrency. Heres the paper: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html. Я думаю, что одно или оба предложения в этом документе, скорее всего, будут приняты, но хорошо видно на следующем или двух заседаниях.

Я знаю, что С++ 11 теперь гарантирует, что содержимое std::string будет храниться смежно, но применили ли они вышеупомянутое в окончательном проекте?

Будет ли теперь безопасно использовать что-то вроде &str[0]?

Ответ 1

Да. В С++ 0x FDIS 21.4.7.1/1, std::basic_string::c_str() должен возвращать

указатель p такой, что p + i == &operator[](i) для каждого i в [0,size()].

Это означает, что для строки s указатель, возвращаемый s.c_str(), должен быть таким же, как адрес начального символа в строке (&s[0]).