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.512.6讨论。

3、声明中的每个init-declarator都被独立分析,就好像声明中只有这个init-declarator一样。[注:在通常情况下,具有多个声明符的声明等价于相应的只具单个声明符的声明序列。也就是说:

T D1, D2, ... Dn;

通常等价于

T D1; T D2; ... T Dn;

其中Tdecl-specifier-seqDiinit-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)。(代表构造函数或析构函数)

posted @ 2006-04-21 11:20  Goncely  阅读(392)  评论(0编辑  收藏  举报