我目前正在从C ++ Primer一书中学习C ++。在本书中,它介绍了复杂的C ++类型声明,如下所示:
int *a[10];
int (&a)[10];
我理解使用单个修饰符进行简单声明,例如以下工作:
int v;
int *a = &v;
int &b = v;
本书仅列出复杂类型的示例,但没有提供有关它们如何工作的任何详细规则。它还提到了在特定情况下在一个方向或另一个方向上阅读的想法,但是,这对我来说毫无意义,因为从左到右阅读的声明int *a[10];
可能是“它是指向数组的指针”或者它可能是“它是数组中的一组指针。”
此外,第二个声明(int (&a)10
)被认为是指对10个元素的数组的引用,但是,因为括号中的项通常被视为单个项,所以它似乎更有意义将&a
段合并为“引用int”,然后添加[10]
部分将其转换为数组。
我正在寻找正式的,定义明确的规则来理解和编写这些复杂的声明。我不是在寻找“策略”或“技巧”来理解它们 - 我想要有人想要编写编译器的正式规则。