符号,比如
在表达式中,这些符号是运算符,我们有一个明确定义的优先级和结合性表。当表达式很复杂时,我们可以使用这个表来分解和分析它。例如:
&
、*
等,在表达式和声明中都有使用,这是两个不同的概念。在表达式中,这些符号是运算符,我们有一个明确定义的优先级和结合性表。当表达式很复杂时,我们可以使用这个表来分解和分析它。例如:
(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]
?
也许可以从 ()
内部开始阅读,但如果有多个 ()
怎么办?(我没有见过,但这是可能的。)