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

时间:2014-05-05 08:37:24

标签: c++ class types specifications

我正在考虑官方规范中的一个例子:

class A * A;

我读过这一行引入了两个名称:class A,只能通过elaborated-specifier-type和指向A的指针访问。这行是否完全等同于以下两行?< / p>

class A;
A * A;

这条线只是语法糖,实际上我们有两行,如上所述?或者编译器如何解析class A * A;

2 个答案:

答案 0 :(得分:9)

是的,内联声明只是语法糖。您可以在同一行上正确声明该名称

答案 1 :(得分: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

<强>§7.1.6

type-specifier:
    trailing-type-specifier
    class-specifier
    enum-specifier

<强>§8.3.1

  

在声明T D中,D表格中有* attribute-specifier-seq_*opt* cv-qualifier-seq_*opt* D1   T D1和类型   声明T中的标识符是“derived-declarator-type-list D”,然后是   T标识符的类型是“derived-declarator-type-list cv-qualifier-seq指向class-specifier的指针。”

现在class里面包含class A * A个关键字。因此* A是有效的语法结构,其中{{1}}是声明者。