我刚开始接触 C,我想养成一些好习惯。如果我刚刚int使用new运算符分配了一个类型数组,我如何将它们全部初始化为 0 而无需自己循环遍历它们?我应该使用memset吗?有没有“淐”的办法呢?
int
new
memset
这是 C++ 一个令人惊讶的鲜为人知的特性(这一点可以从没有人给出这个答案的事实中得到证明),但它实际上具有用于值初始化数组的特殊语法:
new int[10]();
请注意,您 必须 使用空括号 - 例如,您不能使用(0)或其他任何东西(这就是为什么这仅对值初始化有用)。
(0)
这是 ISO C++03 5.3.4[expr.new]/15 明确允许的,它说:
创建类型对象的 new 表达式T按如下方式初始化该对象: … 如果 new-initializer 的形式为(),则该项为值初始化(8.5);
创建类型对象的 new 表达式T按如下方式初始化该对象:
T
…
()
并且不限制允许这样做的类型,而该(expression-list)形式受到同一节中的进一步规则的明确限制,因此它不允许数组类型。
(expression-list)