2017-02-25 140 views
-2

C++ Primer告訴我s[s.size()]應該是不可預知的。爲什麼s [0]是C++中空字符串s的空字符串?

但我嘗試了很多次,並將其插入到其他代碼中,s[0]始終是一個空字符串。但是,s不是空字符串時,嘗試訪問s[size()]將引發錯誤。

爲什麼空字符串是特殊的?

+0

究竟是什麼? – BlueWanderer

+3

請嘗試更清楚地表達您的問題。 *「s [0]總是一個空字符串」*甚至沒有意義,因爲s [0]是一個char字符串,所以它永遠不會是任何類型的字符串,也不會是空的。 –

+0

對不起,我的表達不清楚,因爲英語不是我的母語,英語學習在我的國家並不普遍。 – RevolverOcelot

回答

6

成員對字符串的訪問會產生字符,而不是字符串。

C++ 11個保證s[s.size()]是0 C++ 17甚至允許你寫入s[s.size()],只要你正在寫的值0:

[關於operator[](size_type pos):]

需要pos <= size()

返回*(begin() + pos) if pos < size()。否則,返回對 charT對象的引用,其值爲charT(),其中將對象修改爲除charT()以外的任何值都會導致未定義的行爲。

charT()是standardese爲 「零」。)

此前C++ 17的最後一句不包含詞語 「比charT()之外的任何值」。這是過分限制的,例如,禁止將strcpy轉換成正確大小的字符串。