【问题标题】:A point from C++0x draft : n3290C++0x 草案中的一点:n3290
【发布时间】:2011-09-01 11:56:23
【问题描述】:

来自 N3290 草案 ISO 标准,§3.4.1/12 的一点:

在查找在 enumerator-definitionconstant-expression 中使用的名称期间,之前声明的枚举的 enumerators 是可见的并隐藏在包含 enum-specifier 的块、类或命名空间范围内声明的实体的名称。

这是增加的新点,谁能解释一下这个..点用一个例子(就一个例子而言)?

【问题讨论】:

  • 这种行为看起来与 C++03 (7.2-3) 相同...虽然在技术上措辞较少...?
  • @Tony,可能会考虑范围枚举。
  • @Tony, @AProgrammer:它似乎与 C++03(实际上)没有太大区别,所以也许只是对措辞的澄清?
  • @Matthieu:是的 - 对我来说似乎不太正式的解释。 @AProgrammer:如果作用域枚举在这后面,我看不出如何。

标签: c++ c++11


【解决方案1】:

让我们有一些代码:

struct X {};

enum Foo
{
  X = 0,
  Y,
  Z = X // X refers to the enum, not the type
};

【讨论】:

  • Z = X + n 最好,因为两个枚举成员不能具有相同的值。
  • @neodelphi:实际上......他们可以。例如,几个不同的错误映射到同一个错误代码的情况并不少见,在这种情况下,每个错误都有一个“成员”,但值比成员少。
  • 其他足够常见的例子:{ MIN = 4, A = 4, B, C, D, MAX = D }, { CASE_INSENSITIVE = 0, CASE_SENSITIVE = 1, NO_SUBEXPR_CAPTURE = 0, SUBEXPR_CAPTURE = 2 }...
  • @Tony : 上例中 SUBEXPR_CAPTURE 的真正含义
  • @user76856:我在考虑编译/执行正则表达式的典型函数(通常每个步骤都有一个函数)。使用正则表达式,您可以使用括号来创建子表达式,而正则表达式函数让您可以获取它们的数组以供事后检查。例如,([0-9]+)-([0-9]+) 解析像“123-4567”这样的值,其中“123”和“4567”是子表达式。因此,当为此类函数提供“标志”值时,CASE_INSENSITIVE | SUBEXPR_CAPTURE 之类的东西比 SUBEXPR_CAPTURE 更有意义,即使结果枚举的数值相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
相关资源
最近更新 更多