C++ 理解复杂声明

一句话

由内而外,先右后左,从抽象到具体!

第一个例子

int *a[10];

提问:a是啥??

第一步: int *a[10];

从a开始,由内而外开始解释。先右后左,所以先看[10],说明a是元素数为10的数组!

第一步我们就抓住了a的本质!a就是一个数组。知道了它是数组,我们就知道它支持下标访问等。这就是这个方法的好处,先抓住大体,在深究细节!

要知道数组里装的是啥,就继续看。

第二步: int *a[10]

右边看完了,那就看左边,看到*,说明数组里装的是指针

要知道指针指的啥,就继续向左看。

第三步int* a[10]

看到int,说明指针指向的是int

所以综合起来,a就是个数组,数组里装的是指针,指针指向int,简称int指针数组!

相信这个简单的例子已经让大家有点感觉了,我们再举个复杂的例子。

第二个例子

using func_t = int (*())();

提问:func_t 是啥??

这次没有a了,不慌,我们还是按照从内而外的原则,从最里面开始!

问题来了,“最里面”是

int (*(这里))();

还是

int (*这里())(); ?

这里说明一下,里面没东西的()永远都解释成函数的参数列表,而不是一个冗余的括号!所以:

int (*这里())();

才是最里面!!

找到了“最里面”,我们还是按照套路来。由于这次没有标识符,我们把暂且func_t塞到最里面的位置占个位:

int (*func_t())();

第一步:先右后左原则,看括号。

int (*func_t())();

说明func_t就是个函数!参数列表为空。函数的返回值是什么?继续看。

第二步:有括号先看括号内的。括号里面右边看完了,我们转到左边,发现有个指针。

int (*func_t())();

说明函数的返回值是指针!指针指向什么?继续看。

第三步:int (*func_t())();

括号内的看完了,继续先右后左,这次右边是括号,说明指针指向的是函数!函数的返回值是什么?

第四步int (*func_t())();

没错,就是int!

综合起来,func_t 是个函数,函数的返回值是 函数指针!

posted @ 2020-05-19 00:39  BinarySong  阅读(289)  评论(0编辑  收藏  举报