8 声明符
8 声明符
1、声明中的声明符声明了一个对象、函数或类型。出现在声明中的init-declarator-list是一个由逗号分隔的声明符序列,其中的每个声明符可具有一个初始化体。
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator initializeropt
2、声明由说明符(decl-specifier-seq; 7.1)和声明符(init-declarator-list)两个部分构成。说明符给出了被声明对象、函数或类型定义的类型、存储类和其它属性。声明符则用于指定这些对象、函数或定义类型的名字,并且(可选地)通过操作符*(指针)和( )(函数返回)修正说明符给出的类型。可在声明符中为对象指定初始值;初始化体在8.5和12.6讨论。
3、声明中的每个init-declarator都被独立分析,就好像声明中只有这个init-declarator一样。[注:在通常情况下,具有多个声明符的声明等价于相应的只具单个声明符的声明序列。也就是说:
T D1, D2, ... Dn;
通常等价于
T D1; T D2; ... T Dn;
其中T为decl-specifier-seq,Di为init-declarator。一个例外发生在其中某个声明符所引入的名字隐藏了decl-specifier使用的类型名,这时在后续的声明中使用的同一个decl-specifier将不再有相同的含义,如下
struct S { ... };
S S, T; // declare two instances of struct S
并不等价于
struct S { ... };
S S;
S T; // error
]
4、声明符的句法如下:
declarator:
direct-declarator
ptr-operator declarator
direct-declarator:
declarator-id
direct-declarator ( parameter-declaration-clause ) cv-qualifier-seqopt exception-specificationopt
direct-declarator [ constant-expressionopt ]
( declarator )
ptr-operator:
* cv-qualifier-seqopt
&
::opt nested-name-specifier * cv-qualifier-seqopt
cv-qualifier-seq:
cv-qualifier cv-qualifier-seqopt
cv-qualifier:
const
volatile
declarator-id:
id-expression
::opt nested-name-specifieropt type-name
在类的声明中,类名被其自身通过作用域解析操作符 :: 限定时具有特殊的含义(5.1, 12.1, 12.4)。(代表构造函数或析构函数)