Будет ли std :: string всегда заканчиваться нулем в C ++ 11? - PullRequest
44 голосов
/ 21 мая 2011

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

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

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

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

1 Ответ

49 голосов
/ 21 мая 2011

Да. Согласно C ++ 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]).

...