字符串数组的初始化C++中
我知道我可以初始化这样字符串数组的初始化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