【问题标题】: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 当然我也从未在实践中使用过。

标签: c++ class visual-c++ member classname


【解决方案1】:

如果 VC++ 不允许这样做,那就是一个错误。

但是,这种语言“特性”是出于 C 兼容性的目的,微软决定不强调 C。例如,C99 特性在被 C++ 采用之前是不可用的。你不应该故意在 C++ 中声明这样的成员。

(在C语言中是默认允许的:成员的命名没有限制,所有成员都是非静态数据成员。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多