c++: new int[3]和new int[3]()的区别是什么?



以下两种代码在main()函数中的区别是什么?都是0。我希望数组q被0填充,因为它是value-init。然而,数组p也充满了0。

int main() {
int *p = new int[3];
int *q = new int[3]();
}

q保证为0。

p将指向未初始化的内存,因此将填充以前使用时在该内存位置中留下的任何数据。它可能是零,但它可能是什么;你不能指望它被设置为任何特定的值,所以你必须在从内存中读取之前写入内存,否则你会调用未定义行为。

()是初始化项。这个特定的初始化器将数组的每个元素都设置为零。如果不提供初始化器,则会进行默认初始化,在int *p = new int[3];的情况下,会产生一个充满不确定值("garbage")的数组,这些值可能是也可能不是0;

相关内容

最新更新