10 c++ types specifications class
我正在考虑官方规范的一个例子:
class A * A;
Run Code Online (Sandbox Code Playgroud)
我读过这一行引入了两个名称:class A只能通过elaborated-specifier-type和指向A的指针访问.这行是否完全等同于以下两行?
class A;
A * A;
Run Code Online (Sandbox Code Playgroud)
那条线只是语法糖,实际上我们有两条线,如上所述?或者class A * A;编译器如何解析?
小智 8
我正在寻找N3797工作草案中更详细的答案,我发现了以下内容:
§8.3.3:
因此,特定标识符的声明的形式
T D,其中T的形式为attribute-specifier-seq_*opt* decl-specifier-seq和D是一个说明符.
§7.1:
decl-specifier:
storage-class-specifier
type-specifier
function-specifier
friend
typedef
constexpr
decl-specifier-seq:
decl-specifier attribute-specifier-seq_*opt*
decl-specifier decl-specifier-seq
Run Code Online (Sandbox Code Playgroud)
§7.1.6:
type-specifier:
trailing-type-specifier
class-specifier
enum-specifier
Run Code Online (Sandbox Code Playgroud)
§8.3.1:
在声明
T D,其中D具有形式* attribute-specifier-seq_*opt* cv-qualifier-seq_*opt* D1和在声明的标识符的类型T D1是"衍生的说明符类型列表T",然后的标识符的类型D是"衍生的说明符类型列表CV-限定符-SEQ指针T".
现在class-specifier包含class关键字.因此class A * A是有效的语法结构,其中* A是声明者.