0

例如 a[20] 的元素,如果尚未定义,首先会以空字符串开始(即 a[0]=="", a[1]=="", a[2]=="" ,.....a[20]=="")。我不确定这是否是正确的逻辑,或者我是否将它与 JavaScript 混淆了。

4

2 回答 2

4

C++ 中的数组包含给定类型的元素。默认初始化数组是否包含空字符串取决于数组所包含的元素类型。

当数组默认初始化时,

SomeType arr[42]; // contains 42 SomeType objects

它的元素也是默认初始化的。对于内置类型,例如intdoublebool和指针,这意味着不执行初始化。它们可以保存任何值,并且从它们中读取是未定义的行为。对于用户定义的类型,调用默认构造函数。如果类型是表示字符串的东西,并且它的默认构造函数创建一个表示空字符串的对象,那么是的,可以说这种数组的默认初始化使其充满空字符串:

std::string strings[42]; // contains 42 empty strings
const char* chars[42];   // contains 42 pointers to char pointing to "random" places

现在,有一个称为值初始化的初始化,它具有零初始化内置类型的效果,并为用户定义的类型调用默认构造函数。这允许您创建零初始化的内置对象数组:

int my_ints[42] = {}; // contains 42 zeros
const char* my_chars[42] = {}; // contains 42 null pointers
char chars[42] = {}; // Contains 42 empty strings (since 0 is string termination by convention)
于 2013-08-27T15:36:53.253 回答
0

char a[20]; 不会将 a 初始化为任何东西。从中读取是未定义的。

char a[20] = {}; 将整个数组初始化为零(空终止符).. 即:a 是一个空字符串。

char a[20]; a[0] = '\0'; 将第一个字符设置为空终止符。创建空字符串的更详细但可能更有效的方法。

std::string a; 创建一个可以使用的空 C++ 字符串。

于 2013-08-27T15:25:56.210 回答