具有类名的数据成员
Posted
技术标签:
【中文标题】具有类名的数据成员【英文标题】:data member with the class name 【发布时间】:2015-11-01 02:24:42 【问题描述】:标准说, “如果成员是静态数据成员、成员函数、成员类型、成员模板、无作用域枚举的枚举器、成员匿名联合的成员,则类 T 的成员不能使用 T 作为其名称。但是,只要没有用户声明的构造函数,非静态数据成员就可以使用名称 T。”
但是,如果我创建此类,则会出现编译错误。
class G
int G;
;
我正在使用 VS2013。微软不允许吗?
【问题讨论】:
什么是编译错误?这适用于 Clang 和 GCC。 微软编译器因不符合任何标准而(臭名昭著)。 error: C2380: type(s) before 'G' (constructor with return type, or invalid redefinition of current class-name?) 所以,他们不允许这样做:( 我强烈建议以不同的方式命名类和成员。我从来没有遇到过这个问题,因为我的名字不同。 @ThomasMatthews 当然我也从未在实践中使用过。 【参考方案1】:如果 VC++ 不允许这样做,那就是一个错误。
但是,这种语言“特性”是出于 C 兼容性的目的,微软决定不强调 C。例如,C99 特性在被 C++ 采用之前是不可用的。你不应该故意在 C++ 中声明这样的成员。
(在C语言中是默认允许的:成员的命名没有限制,所有成员都是非静态数据成员。)
【讨论】:
以上是关于具有类名的数据成员的主要内容,如果未能解决你的问题,请参考以下文章