声明类名和具有相同名称的变量

时间:2015-01-12 05:13:09

标签: c++ declaration

标准N4296::3.3.1/4 [basic.scope.declarative]

  

正好一个声明应声明一个类名或枚举名   这不是typedef名称,其他声明都应该引用   相同的变量或枚举,或所有引用函数和   功能模板;在这种情况下,类名或枚举名是   隐藏(3.3.10)。

据我所知,如果在同一个declrartive区域中存在具有相同名称的变量/函数声明,则该规则正在讨论隐藏类的名称。但恰好一个有点令人困惑。以下命名空间完全有效:

namespace A
{
    struct A;
    struct A { };
    int A;
}

DEMO

虽然我们声明了struct A两次(结构的两个声明和一个变量)。怎么了?我在规则中失去了什么?

2 个答案:

答案 0 :(得分:1)

// Exactly one class may have the name:
struct A; // Declaration of a new class.
struct A { }; // Definition, but not a declaration of a new name. Doesn't count.

// Aside from the class, exactly one variable may share the name:
extern int A; // Declaration of a variable.
int A; // Definition of a variable.

答案 1 :(得分:0)

struct A;是一个声明。但是,struct A { };定义