标准N4296::3.3.1/4 [basic.scope.declarative]
:
正好一个声明应声明一个类名或枚举名 这不是typedef名称,其他声明都应该引用 相同的变量或枚举,或所有引用函数和 功能模板;在这种情况下,类名或枚举名是 隐藏(3.3.10)。
据我所知,如果在同一个declrartive区域中存在具有相同名称的变量/函数声明,则该规则正在讨论隐藏类的名称。但恰好一个有点令人困惑。以下命名空间完全有效:
namespace A
{
struct A;
struct A { };
int A;
}
虽然我们声明了struct A
两次(结构的两个声明和一个变量)。怎么了?我在规则中失去了什么?
答案 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 { };
是定义。