string array[] = "";
我怎樣才能將const char*
分配給數組?是這樣的:什麼是string array [] =「」;是什麼意思?爲什麼它有效?
string array[] = {""};
?? ??這對我來說很有意義。然而,這仍然無法正常工作
int array[] = 5;
那麼究竟是什麼,它並沒有爲int
陣列,而它們之間的區別?
string array[] = "";
我怎樣才能將const char*
分配給數組?是這樣的:什麼是string array [] =「」;是什麼意思?爲什麼它有效?
string array[] = {""};
?? ??這對我來說很有意義。然而,這仍然無法正常工作
int array[] = 5;
那麼究竟是什麼,它並沒有爲int
陣列,而它們之間的區別?
這是不正確的代碼;這是你的編譯器(可能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
行爲非常相似char
)http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60009
實際上,該功能是從空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
。雖然這並不完全符合標準,但它適用於大多數編譯器。
這不應該編譯。有一些特殊的規則允許你從字符串文字初始化字符數組;但不是其他任何數組。 –
'string'的類型是什麼?如果它是'std :: string'(因爲它應該是),那麼你的第一行不應該編譯。如果它是'typedef char string',但是,這將是'char []'的經典初始化。 –
當然,''「'的類型不是'char const *',而是'char const [1]'。 –