猿问

int a [] = {1,2,}; 奇怪的逗号允许。任何特殊原因?

也许我不是来自这个星球,但在我看来,以下应该是语法错误:


int a[] = {1,2,}; //extra comma in the end

但事实并非如此。我很惊讶,当编译这段代码在Visual Studio中,但我已经学会了不至于C ++规则而言信任MSVC的编译器,所以我检查的标准,它是标准允许为好。如果你不相信我,你可以看到8.5.1的语法规则。


为什么允许这样做?这可能是一个愚蠢无用的问题,但我希望你理解我为什么这么问。如果它是一般语法规则的子案例,我会理解 - 他们决定不再使一般语法更难以在初始化列表的末尾禁止冗余逗号。但不,明确允许附加逗号。例如,在函数调用参数列表的末尾(当函数采用时...)不允许使用冗余逗号,这是正常的。


那么,是否有任何特殊原因明确允许这个冗余逗号?


慕少森
浏览 567回答 3
3回答

DIEA

它可以更容易地生成源代码,也可以编写可以在以后轻松扩展的代码。考虑添加额外条目所需的内容:int a[] = {&nbsp; &nbsp;1,&nbsp; &nbsp;2,&nbsp; &nbsp;3};...您必须将逗号添加到现有行并添加新行。将其与三个已经有逗号的情况相比较,您只需要添加一行。同样,如果你想删除一行,你可以这样做,而不必担心它是否是最后一行,你可以重新排序行而不用弄乱逗号。基本上它意味着你对待线条的方式是一致的。现在考虑生成代码。像(伪代码)的东西:output("int a[] = {");for (int i = 0; i < items.length; i++) {&nbsp; &nbsp; output("%s, ", items[i]);}output("};");无需担心您写出的当前项目是第一个还是最后一个。更简单。

慕莱坞森

如果您执行以下操作,它会很有用:int a[] = {&nbsp; 1,&nbsp; 2,&nbsp; 3, //You can delete this line and it's still valid};
随时随地看视频慕课网APP
我要回答