2014-01-31 397 views
4
string array[] = ""; 

我怎樣才能將const char*分配給數組?是這樣的:什麼是string array [] =「」;是什麼意思?爲什麼它有效?

string array[] = {""}; 

?? ??這對我來說很有意義。然而,這仍然無法正常工作

int array[] = 5; 

那麼究竟是什麼,它並沒有爲int陣列,而它們之間的區別?

+0

這不應該編譯。有一些特殊的規則允許你從字符串文字初始化字符數組;但不是其他任何數組。 –

+0

'string'的類型是什麼?如果它是'std :: string'(因爲它應該是),那麼你的第一行不應該編譯。如果它是'typedef char string',但是,這將是'char []'的經典初始化。 –

+0

當然,''「'的類型不是'char const *',而是'char const [1]'。 –

回答

5

這是不正確的代碼;這是你的編譯器(可能gcc/g ++?)接受它的一個錯誤。

鐺提供了以下錯誤(link):

a.cpp:5:17: error: array initializer must be an initializer list 
    std::string array[] = ""; 
       ^
1 error generated. 

的Visual C++同意(link):

testvc.cpp(2) : error C3074: an array can only be initialized with an initializer-list 

在標準的有關條款是8.5p17:

[
- 如果目標類型是一個cha數組racters,一個char16_t數組,char32_t數組或一個wchar_t數組,初始值設定項是一個字符串文字,見8.5.2。
[...]
- 否則,如果目標類型是數組,則該程序是格式不正確的。
[...]

提交到gcc作爲一個錯誤:(std::string行爲非常相似charhttp://gcc.gnu.org/bugzilla/show_bug.cgi?id=60009

0

實際上,該功能是從空char陣列的初始化結轉

char buf[10] = "";相當於char buf[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};,但char buf[10] = "a";相當於char buf[10] = {'a', 0, 0, 0, 0, 0, 0, 0, 0, 0};。爲什麼?由於char是一個算術值,因此它被自動初始化爲零。

編譯器將""視爲char值(技術上爲const char*),並將其簡化爲std::string。雖然這並不完全符合標準,但它適用於大多數編譯器。