令人困惑的声明和初始值设定项
Confusing declaration and initializer
这个声明很混乱:
char* q {new char[1024]{}}; // q[i] becomes 0 for all
这是“指向 char
数组的指针”,还是“char
指针的数组”?
我认为 new char[1024]{}
正在初始化一个包含 1024 个元素的 char
数组,每个元素的值为 0
。
所以这与:
char* q = [0,0,....] // until 1024
正确吗?
char* q {new char[1024]{}};
等于
char* q = new char[1024]{};
这又等于
char* q = new char[1024] { 0, 0, 0, 0 /* 1020 more zeros */ }
q
是指向 char
的指针。也就是说,它的类型是char *
.
它使用表达式 new char[1024]{}
进行初始化,该表达式动态分配 char
的数组并将它们零初始化。如果失败,将抛出异常。
q
将指向动态分配数组中的第一个 char
。它不是数组。
与
不一样
char* q = [0,0,....] // until 1024
因为这是无效语法。它也不等同于
char* q = {0,0,....}; // 1024 zeros in initialiser
因为q
是一个指针,不能初始化为一组值。它的(净)效果更接近
char *q = new char[1024]; // dynamically allocates chars uninitialised here
std::fill(q, q + 1024, '[=11=]');
除了字符初始化为零,而不是先取消初始化然后用零覆盖(当然,这取决于编译器如何初始化字符)。
这个声明很混乱:
char* q {new char[1024]{}}; // q[i] becomes 0 for all
这是“指向 char
数组的指针”,还是“char
指针的数组”?
我认为 new char[1024]{}
正在初始化一个包含 1024 个元素的 char
数组,每个元素的值为 0
。
所以这与:
char* q = [0,0,....] // until 1024
正确吗?
char* q {new char[1024]{}};
等于
char* q = new char[1024]{};
这又等于
char* q = new char[1024] { 0, 0, 0, 0 /* 1020 more zeros */ }
q
是指向 char
的指针。也就是说,它的类型是char *
.
它使用表达式 new char[1024]{}
进行初始化,该表达式动态分配 char
的数组并将它们零初始化。如果失败,将抛出异常。
q
将指向动态分配数组中的第一个 char
。它不是数组。
与
不一样char* q = [0,0,....] // until 1024
因为这是无效语法。它也不等同于
char* q = {0,0,....}; // 1024 zeros in initialiser
因为q
是一个指针,不能初始化为一组值。它的(净)效果更接近
char *q = new char[1024]; // dynamically allocates chars uninitialised here
std::fill(q, q + 1024, '[=11=]');
除了字符初始化为零,而不是先取消初始化然后用零覆盖(当然,这取决于编译器如何初始化字符)。