【发布时间】:2014-09-01 08:06:30
【问题描述】:
符号,如&、* 等,用于表达式和声明,这是两个不同的概念。
在表达式中,符号是运算符,我们有一个明确定义的优先级和关联性表。当一个表达式比较复杂的时候,我们可以用这张表来分解分析。 例如
(a + b) * ++c
问题:
在声明中,这些符号不是运算符,因此我们不能应用运算符的优先级和关联性表。 声明中的符号是否有优先级和关联性表?
或者换句话说,当声明变得复杂时(试试这个int*& (*&f(int*))),是否有系统的方法来分解和分析它?
一个密切相关的后续问题:
某本书(入门)通过typedef 的示例教我们如何阅读复杂的声明:
typedef int (*tp_alias)[10]; //defines tp_alias as an pointer to an array of 10 int
书上讲授的方法:使用别名作为阅读的起点,tp_alias是新的类型名。向左看,它有一个*,所以它是一个指针。然后看括号外:向右,[10] 表示它是一个大小为 10 的数组;在左边,int 表示数组的元素是 int。
后续问题:
我们如何阅读其他类型的别名声明,例如using?既然别名不在位了?例如using tp_alias = int (*)[10]?
也许可以从() 中读取,但如果有多个()s 怎么办?(我没见过,但有可能。)
【问题讨论】:
标签: c++