我知道我可以初始化這樣字符串數組的初始化C++中
std::string foo [3] = {"T1","T2","T3"};
但如果宣稱它做之前,我必須初始化每一個通過自己的? 例如
std::string foo [3];
foo[0] = "T1"
foo[1] = "T2"
foo[2] = "T3"
我的意思是給串一次富=所有的值{「T1」,「T2」,「T3」}
我知道我可以初始化這樣字符串數組的初始化C++中
std::string foo [3] = {"T1","T2","T3"};
但如果宣稱它做之前,我必須初始化每一個通過自己的? 例如
std::string foo [3];
foo[0] = "T1"
foo[1] = "T2"
foo[2] = "T3"
我的意思是給串一次富=所有的值{「T1」,「T2」,「T3」}
技術上講,你不能在聲明之後其初始化。細微之處非常重要,因爲在第二個例子中,您分配給單個字符串。現在,你想分配給整個數組,這是行不通的。如果你使用了更加智能的數據結構,如std::vector
,你確實可以在一條指令中分配所有的值,因爲這個向量會丟棄舊字符串並創建新的字符串,這些字符串將從您的"T1"
,..字符串中複製而來。
我還在學習C++,我不是很有經驗,但我相信,也許是,如果你想申報後,初始化的最佳途徑。或者你可以使用for循環來填充它。
沒有,(不像Java的),當你聲明數組,它將使用默認的構造函數的每個索引處的字符串。
編輯爲清楚:
由「新」我的意思不是像new
分配堆,它被存儲無論你宣佈它在數據部分(對於全局)或棧(當地人) 。
從評論,似乎你想更多的是這樣的:
std::string foo[3];
...
foo = {"a","b","c"}; // DOES NOT WORK
不,你不能這樣做。 foo
已經有了它的空間分配和初始化,你不能只分配整個陣列一樣,(除了在初始化)。如果你宣佈它可以是std::string *foo
,但我不建議在這種情況下。
耶,這是我想的,非常感謝 – andrewmag
在C++ 0x中,你就可以使用通用初始化列表。但是,將這些作業寫出來並沒有太大的不同。
待辦事項,但是,在你不得不重複每個分配一個複雜的表達式的情況下(如K-BALLO指出,分配和初始化的不同有時是重要的,獲得顯着的習慣):
ALongPointerName->ALongMemberName.ALongArrayName[0] = "T1";
ALongPointerName->ALongMemberName.ALongArrayName[1] = "T2";
ALongPointerName->ALongMemberName.ALongArrayName[2] = "T3";
你可以使用一個參考縮短,最多:
auto& a = ALongPointerName->ALongMemberName.ALongArrayName;
a[0] = "T1";
a[1] = "T2";
a[2] = "T3";
其帶走太多的痛苦。
謝謝,這正是我想知道的 – andrewmag