A*A级如何; C++解析的声明?

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;编译器如何解析?

Luc*_*ore 9

是的,内联声明只是语法糖.您正在声明该名称在同一行上使用它.


小智 8

我正在寻找N3797工作草案中更详细的答案,我发现了以下内容:

§8.3.3:

因此,特定标识符的声明的形式T D ,其中T的形式为attribute-specifier-seq_*opt* decl-specifier-seqD是一个说明符.

§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是声明者.