new int[n]() 是如何工作的?
How new int[n]() works?
我对新的 int[n]()
运算符很好奇,据我所知,它用于将数组值初始化为零,这是使用 new
运算符创建的。但是我不能像 new int[n](x)
这样在括号中使用一些值来将值初始化为 x
,为什么我不能这样做,当我使用 new int[n]()
时编译器级别会发生什么?
new
在 int[n]()
上调用构造函数调用,这就是将其设置为 0 的原因。当您将其称为 new int[n]
时,您只是 default初始化 数组。这意味着内存只是分配的,而不是设置的。
new int[n]()
是 value-initializing 你的数组,分配 space 和初始化每个 int
,就像 int()
。这就是为什么它被设置为 0,并且不能通过调用 int(x)
设置为其他任何东西;没有可以这样使用 x
的 int
构造函数。调用 int(x)
将被解读为 函数式类型转换 ,而不是 int
.
类型的构造函数
int
是一个 POD,根据 C++11,您可以对数组进行值初始化。在 int
的情况下是 0
。
它不能与括号中的值一起使用的原因是因为它没有定义。如果您坚持(出于教育原因),您可以重载 new 运算符来执行您想要的操作。
您可以使用初始化列表初始化数组:
int* a = new int[10]{10, 6};
然而,它会初始化本例中的前两个元素。
我对新的 int[n]()
运算符很好奇,据我所知,它用于将数组值初始化为零,这是使用 new
运算符创建的。但是我不能像 new int[n](x)
这样在括号中使用一些值来将值初始化为 x
,为什么我不能这样做,当我使用 new int[n]()
时编译器级别会发生什么?
new
在 int[n]()
上调用构造函数调用,这就是将其设置为 0 的原因。当您将其称为 new int[n]
时,您只是 default初始化 数组。这意味着内存只是分配的,而不是设置的。
new int[n]()
是 value-initializing 你的数组,分配 space 和初始化每个 int
,就像 int()
。这就是为什么它被设置为 0,并且不能通过调用 int(x)
设置为其他任何东西;没有可以这样使用 x
的 int
构造函数。调用 int(x)
将被解读为 函数式类型转换 ,而不是 int
.
int
是一个 POD,根据 C++11,您可以对数组进行值初始化。在 int
的情况下是 0
。
它不能与括号中的值一起使用的原因是因为它没有定义。如果您坚持(出于教育原因),您可以重载 new 运算符来执行您想要的操作。
您可以使用初始化列表初始化数组:
int* a = new int[10]{10, 6};
然而,它会初始化本例中的前两个元素。