2011-05-20 26 views
43

在2008年後他的網站上,香草薩特規定如下:std :: string總是以C++ 11爲空終止?

有一個積極的建議,C++ 0x中進一步加強這件事,並要求空終止,並可能禁止寫入時複製實現,出於併發性相關的原因。這是紙:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html。我認爲本文中的一個或兩個提案很可能會被採納,但我們會在下一次會議上看到。

我知道C++ 11現在保證std :: string的內容是連續存儲的,但是他們是否在最後的草稿中採用了上述內容?

現在可以安全使用類似&str[0]的東西嗎?

+0

保證連續存儲的內容也在C++ 03中提供? – triclosan 2013-07-22 15:35:13

回答

45

是的。每的C++ 0x FDIS 21.4.7.1/1,std::basic_string::c_str()必須[0,size()]返回

每個i一個指針p使得p + i == &operator[](i)

這意味着,給定的字符串s,通過s.c_str()返回必須是相同的字符串(&s[0])在初始字符的地址的指針。

+4

請注意,相同的要求適用於'數據',我認爲C++ 98/03不適用。 – Xeo 2011-05-20 20:32:28

+6

是的,這表明'basic_string <> :: c_str()'和'basic_string <> :: data()'現在具有完全相同的語義。 – ildjarn 2011-05-20 20:35:11

+14

這似乎沒有回答帖子標題的問題 - 即「將'std :: string'永遠以C++ 11爲空終止?」,在這種情況下答案是否定的。 'operator [str.length()]'會返回''\ 0'',但這並不意味着'string'實際上將它包含在內存中。 – 2013-06-24 16:21:55

相關問題