You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用new运算符创建数组时带尾括号与不带尾括号的核心区别是什么?

用new创建数组时带尾随括号与不带括号的核心区别

核心差异在于初始化方式的不同:

  • 针对内置数据类型(如int、char、float等):

    • new int[5]; 执行默认初始化:数组里的每个元素不会被赋值,值是未定义的随机垃圾值,直接使用可能导致不可预测的行为。
    • new int[5](); 执行值初始化:数组的每个元素都会被强制初始化为0。
  • 针对自定义类类型(拥有默认构造函数的情况):
    两种写法的效果完全一致,都会调用类的默认构造函数来初始化数组中的每个元素。如果类没有默认构造函数,两种写法都会编译失败——因为不管是默认初始化还是值初始化,都需要默认构造函数的支持。

代码示例

// 内置类型测试
int* arr_default = new int[5];
// arr_default的元素是随机垃圾值,未定义
int* arr_value = new int[5]();
// arr_value的每个元素都是0

// 自定义类测试
class TestClass {
public:
    int num;
    TestClass() : num(20) {} // 默认构造函数
};

TestClass* cls_arr1 = new TestClass[3];
TestClass* cls_arr2 = new TestClass[3]();
// 两个数组的每个元素num都是20,行为一致

内容的提问来源于stack exchange,提问作者Synex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:02:02