复杂C ++变量声明的规则

时间:2016-06-08 06:45:43

标签: c++ language-lawyer variable-declaration

我目前正在从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]部分将其转换为数组。

我正在寻找正式的,定义明确的规则来理解和编写这些复杂的声明。我不是在寻找“策略”或“技巧”来理解它们 - 我想要有人想要编写编译器的正式规则。

0 个答案:

没有答案