是否有额外的","在大括号初始化结束?

时间:2014-06-11 06:43:23

标签: c++ initialization

以下两个声明之间是否有区别,除了显而易见的 - 名称:

int main()
{
    char str1[17] = {'H','e','l','l','o'};
    char str2[17] = {'H','e','l','l','o',};
}

第二个中的额外','是什么?这有什么意义吗?

两者似乎编译得很好,在这种情况下,它们似乎根据strcmp生成相同的字符串,至少是我所期望的,因为其余的数组都填充了零。

2 个答案:

答案 0 :(得分:4)

不,它们完全相同。我相信允许使用尾随逗号,以便以C ++源代码的形式促进数组的机器生成。

答案 1 :(得分:4)

尾随逗号并非特定于大括号初始化,并且在编程语言中无处不在(JSON数据格式是异常值)。

除了简单的机器生成之外,从尾随逗号获得的一个(小)好处是较小的代码差异。如果你改变:

array<string, 20> a = {
    "one",
    "two",
    "three",
};

array<string, 20> a = {
    "one",
    "two",
    "three",
    "four",
};

你只能获得1行差异。如果省略可选的尾随逗号,则需要更改2行以添加或删除最后一个元素。一致地使用尾随逗号可以在编辑和读取差异时节省数秒。