typedef using 定义别名与复杂类型的解析
类型别名
using定义别名的用法和typedef区别不大,但是using可以使用模板,比如:
1 | template<typename T> |
解析复杂类型
C++复杂类型的解析遵循以下顺序,方括号和圆括号(即,标识符右侧的修饰符)优先于星号(即,标识符左侧的修饰符)。 方括号和圆括号具有相同的优先级并且都是从左到右关联。 在完全解释声明符之后,将应用类型说明符以作为最后一步。 通过使用圆括号,您可以重写默认关联顺序和强制实施特定解释。 但是,绝不要单独在标识符名称两边使用圆括号。 这可能会被错误解释为参数列表。
解释复杂声明符的一个简单方法是通过下列 4 个步骤“从里到外”地读取它们:
- 从标识符开始并直接查找方括号或圆括号(如果有)的右侧。
- 解释这些方括号或圆括号,然后查找星号的左侧。
- 如果在任何阶段遇到一个右圆括号,请返回并将规则 1 和 2 应用于圆括号内的所有内容。
- 应用类型说明符。
1 | char *( *(*var)() )[10]; |
在此示例中,步骤是按顺序编号的,并且可以按如下方式解释:
- 标识符 var 声明为
- 指向以下内容的指针
- 返回以下内容的函数
- 指向以下内容的指针
- 包含 10 个元素的数组,这些元素分别为
- 指向以下内容的指针
- char 值。