Будет ли 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]
).