2012-09-20 103 views
18

我對字符串文字的數據類型感到困惑。是const char *還是const char?深表讚賞。由於C++什麼是字符串文字的數據類型?

+0

看到我的回答http://stackoverflow.com/questions/12451496/what-is-the-data-type-for-a-string/12452097#12452097到類似的問題。 – PiotrNycz

+11

根據有這個錯誤的人的數量來判斷(思考它的const char *)我不明白爲什麼這是被低估了。顯然,當一半的受訪者不知道答案時,這是一個很好的問題。 – WhozCraig

+5

@CraigNelson,我已經看到很多人有10s的代表在過去的一段時間裏錯了。 – chris

回答

25

這是一個const char[N](這是一回事char const[N]),其中N是字符串的長度加上一個用於終止NUL(或只是如果你定義「長度的字符串的長度字符串「已包括NUL)。

這就是爲什麼你可以做sizeof("hello") - 1來獲得字符串中的字符數(包括任何嵌入的NUL s);如果它是一個指針,它將不起作用,因爲它總是系統指針的大小(減一)。

+6

要備份它,*窄 字符串常量的類型爲「n常量字符數組」,其中n是下面定義的字符串的大小,並且具有 靜態存儲持續時間(3.7)* – chris

+1

Downvoter care to comment ? –

+0

不是我。在觀看史詩般的動盪之後,我已經在這個問題上大肆表達了贊成票。答案,好吧,多數民衆贊成在另一個故事.. =) – WhozCraig

7

"Hello world"const char[12](十一個字符加上'\0'終止符)。

L"Hello world"const wchar_t[12]

而且由於C++ 14,"Hello world"sstd::string

還要注意由C++ 11加入u8""u""U""字符串文字符號,其分別指定UTF-8,UTF-16和UTF-32的編碼。非限定字符串文字(即""L"")的編碼是(並且總是)實現定義的。

相關問題