类名作为数据成员

8
标准规定,如果一个类T的成员是静态数据成员、成员函数、成员类型、成员模板或未作用域枚举类型的枚举器、成员匿名联合体的成员,则该成员不能使用T作为其名称。但是,只要没有用户声明的构造函数,非静态数据成员可以使用名称T。
然而,如果我创建这个类,它会出现编译错误。
class G
{
    int G;
};

我正在使用VS2013。它在Microsoft中不允许使用吗?

3
编译错误是什么?这在使用Clang和GCC时有效。 - Hamdor
10
微软的编译器以不符合任何标准而声名狼藉。 - Richard Hodges
错误:C2380:在“G”之前的类型(具有返回类型的构造函数,或当前类名的非法重新定义?)所以,它们不允许这样做 :( - code_not_yet_complete
1
我强烈建议给类和成员命名不同的名称。因为我一直保持名称不同,所以从未遇到过这个问题。 - Thomas Matthews
@ThomasMatthews 确实,我在实践中也从未使用过这个。 - code_not_yet_complete
1个回答

3
如果VC++不允许这样做,那就是一个bug。
然而,这个语言“特性”是为了C兼容性而设计的,微软已经决定不再强调C。例如,C99特性通常要等到被C++采纳才可用。你永远不应该在C++中故意声明这样的成员。
(在C中,默认情况下允许:成员命名没有限制,并且所有成员都是非静态数据成员。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接