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

为何带尾逗号的const char*数组声明可正常编译?

为什么带末尾逗号的数组初始化能正常编译?

这是因为C和C++标准很早就允许初始化列表末尾保留逗号,这个设计主要是为了方便代码维护:后续给数组加新元素时,直接在末尾新增一行即可,不用修改上一行的结尾(避免漏加逗号导致编译错误)。

具体到你的两个定义:

  • const char* testarr[]={{},};:这里的{}用来初始化数组的第一个元素,对于const char*类型,空初始化列表会触发零初始化,也就是把testarr[0]设为空指针;末尾的逗号完全符合语法,编译器会直接忽略它,不会报错。
  • const char* testarr[]={{}};:和上面的效果完全一致,只是少了末尾的逗号,同样会把数组第一个元素初始化为空指针,数组大小被推导为1。

另外你这里的双层大括号其实可以简化成单层:const char* testarr[]={nullptr,};或者const char* testarr[]={nullptr};,效果完全相同,双层大括号属于冗余写法,但编译器也会正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:42:01