我有这样的代码:
class A
{
public:
unsigned long a;
static const unsigned long b = sizeof(a); // "error C2327: 'A::a' : is not a type name, static, or enumerator" in VC++
};
我在 VC++ 中遇到编译器错误,在 IAR 中没有错误。
哪个编译器是正确的,C++ 标准对此有何规定?
您的 MSVS 版本相当旧,因此基于此,并假设它们默认为 C++03,它们拒绝您的代码是正确的。我会引用n1905 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf,就我们的目的而言,它非常接近 C++03 标准。
9.4 [类.静态](强调我的)
如果在 static 的定义中使用了 unqualified-id (5.1)
成员声明符 id 后面的成员和名称查找 (3.4.1)
发现 unqualified-id 引用静态成员、枚举数,
或成员类的嵌套类型(或该成员的基类的嵌套类型)
成员的班级),unqualified-id被转换为qualified-id
嵌套名称说明符命名类范围的表达式
从中引用该成员。静态成员的定义
不得直接使用其非静态成员的名称
类或其基类的类(包括作为操作数
sizeof 运算符)。静态成员的定义只能引用
这些成员形成指向成员的指针(5.3.1)或与类
成员访问语法 (5.2.5)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)