也许我不是来自这个星球,但在我看来,以下应该是语法错误:int a[] = {1,2,}; //extra comma in the end但事实并非如此。我很惊讶,当编译这段代码在Visual Studio中,但我已经学会了不至于C ++规则而言信任MSVC的编译器,所以我检查的标准,它是标准允许为好。如果你不相信我,你可以看到8.5.1的语法规则。为什么允许这样做?这可能是一个愚蠢无用的问题,但我希望你理解我为什么这么问。如果它是一般语法规则的子案例,我会理解 - 他们决定不再使一般语法更难以在初始化列表的末尾禁止冗余逗号。但不,明确允许附加逗号。例如,在函数调用参数列表的末尾(当函数采用时...)不允许使用冗余逗号,这是正常的。那么,是否有任何特殊原因明确允许这个冗余逗号?
3 回答
DIEA
TA贡献1820条经验 获得超2个赞
它可以更容易地生成源代码,也可以编写可以在以后轻松扩展的代码。考虑添加额外条目所需的内容:
int a[] = {
1,
2,
3
};
...您必须将逗号添加到现有行并添加新行。将其与三个已经有逗号的情况相比较,您只需要添加一行。同样,如果你想删除一行,你可以这样做,而不必担心它是否是最后一行,你可以重新排序行而不用弄乱逗号。基本上它意味着你对待线条的方式是一致的。
现在考虑生成代码。像(伪代码)的东西:
output("int a[] = {");
for (int i = 0; i < items.length; i++) {
output("%s, ", items[i]);
}
output("};");
无需担心您写出的当前项目是第一个还是最后一个。更简单。
慕莱坞森
TA贡献1810条经验 获得超4个赞
如果您执行以下操作,它会很有用:
int a[] = {
1,
2,
3, //You can delete this line and it's still valid
};
- 3 回答
- 0 关注
- 566 浏览
添加回答
举报
0/150
提交
取消