尾随逗号和C++

Trailing commas and C++

本文关键字:C++      更新时间:2023-10-16

我在某些地方读到C++标准不允许enum an_enum { a, b, c, };这样的东西,而C的更高版本(我认为从90年代中期开始)确实允许使用尾随逗号的声明。如果C++应该与C向后兼容,为什么这个功能被禁止?有什么特殊原因吗?

我还读到这样的尾随逗号实际上很好,所以这只会增加混乱。

C++03(这是C++98的一个相当小的更新)的C兼容性基于C89(也称为C90,取决于您是ANSI还是ISO)。C89不允许使用尾随逗号。C99确实允许它。C++11确实允许它(7.2/1具有枚举声明的语法)。

事实上,C++即使与C89也不完全向后兼容,尽管如果它在C89中,你会期望C++允许它

尾部逗号对我来说的关键优势是当你写这篇文章时:

enum Channel {
    RED,
    GREEN,
    BLUE,
};

然后稍后将其更改为:

enum Channel {
    RED,
    GREEN,
    BLUE,
    ALPHA,
};

当您diff版本时,只更改了一行,这很好。为了在不允许使用尾随逗号的情况下获得相同的效果,您可以写道:

enum Channel {
    RED
   ,GREEN
   ,BLUE
};

但(a)这是一种疯狂的说法,(b)在一开始就想添加新值的情况下(诚然是罕见的),这并没有帮助。

查看C++0x的最新草案,可以使用尾随逗号:

enum-specifier:
enum-head { enumerator-list opt}
enum-head { enumerator-list , }
enumerator-list:
enumerator-definition
enumerator-list , enumerator-definition

首先,上一个C标准是在1999年。最后一个(完整的)C++标准是98(2003年是更新版)。在那之后,并不是所有的C99都进入了C++11。

枚举中的尾随逗号是C99中引入的一项功能。它不存在于C90或基于C99之前基线的C++版本中。

相关文章:
  • 没有找到相关文章