初学者经常会惊讶地发现声明
int* a, b;
将a
声明为int
和b
作为int
的指针。这源于C和C ++中的声明分为说明符和声明符的奇怪方式。声明以单个说明符列表开头,但声明的每个实体都有自己的声明符,它独立地修改说明符以提供实体的结果类型。因此,上述声明有两个声明者*a
和b
。第一个声明符中的*
与int
说明符结合使用,为int*
提供a
类型,第二个声明符没有修饰符,因此结果类型只是{ {1}}。
同时,在某些情况下,需要类型名称(C ++中的 type-id ),它是说明符和可选的“抽象声明符”的组合。 ,这基本上是一个省略名称的声明者。例如int
是类型名称。但类型名称不直接用于声明。如上所述,int*
不会被解释为类型名称,后跟两个标识符,正如人们所期望的那样。
所以我们有两个形成类型名称的说明符,声明符和组合,但类型名称不用于声明相应类型的变量,即使它们实际上是类型的名称,定义为只缺少名称。 这种语法的历史原因是什么,复杂且违反直觉?能够编写这样的代码有什么好处吗?
int* a, b