C++学习笔记——复杂定义的解读
对C++有一丁点涉及的人都应该知道,声明是编程中不可或缺的一部分。比如变量、函数和对象声明。日常编程中大多声明都是十分简单的,但偶尔会遇到一些十分复杂的声明,下面借用最近在读《C++编程思想》这本书中的内容总结一下解读一个声明的规则。
下面这些定义相信大家都很熟悉,解读起来也毫无困难:
int i; #定义一个整数i
int main(){};#定义一个名为main的函数,函数的返回值为整数
上面的两个声明只是最基础的,下面level up一下:
int *i; #定义一个指向整型变量的指针
void (*funcPtr)(); #声明一个指向一个没有参数,没有返回值的函数的指针
当然,上面两个声明也不困难,但是可以应用一些规则来解读了。解读声明请遵守:变量名-右-左-右,大多数的的声明都可以按照这个规则来解读。下面来用上面这个规则来解读一下以上第2个声明,从变量名开始,再右-左-右解读:
- 变量名开始:变量名为funcPtr,就从这里开始。
- 右:右面是括号,遇到括号就直接看左边。
- 左:接下来看左边,是一个‘*’,表示这是一个指针的变量,到这里又遇到了括号,跳到括号外,继续看右面。
- 右:一对括号,括号里没有东西,表示这个指针,指向没有参数的函数,继续往右看,没有内容了,又转向左边。
- 左:void,表示这个指针指向的函数没有返回值。
单看这个声明也不是特别困难,再来看看这个:
void *funcPtr(); #声明一个返回空指针的无参函数。
这个声明跟上面那个十分相似,差异只在一个括号位置而已。
最后总结一下定义或声明的解读方式:变量开始,先右后左,遇到括号调转方向。