时间:2021-05-20
前言
C++ 中一个标识符配合着各种修饰界定符,使得标识符的本意不那么直观一眼就能看出,甚至需要仔细分析,才能知道该标识符的具体你含义。
比如:
void (*signal(int, void (*fp)(int)))(int);其中 signal 是什么?
螺旋法则
对于如何进行变量的辩识,有个非官方的 “顺时针/螺旋法则(Clockwise/Spiral Rule)” 可用来帮助辩识。
该法则的内容,简单来说,为了搞清楚一个未知标识符的含义,我们可以:
1、从我们需要判定的标识符开始,顺时针画圈,遇到如下符号时,用对应的语义替换:
2、重复上面的步骤直到语句中所有符号都被遍历过。
3、始终优先解析括号括起来的部分。
实地演练
一个简单的示例
先从一个简单的开始,判定如下语句中 str 的含义:
+-------+
| +-+ |
| ^ | |
char *str[10];
^ ^ | |
| +---+ |
+-----------+
根据螺旋法则,如上面线图标识所示,
进阶
回到文章开头那个语句,来判定其中 signal 的含义。
+-----------------------------+
| +---+ |
| +---+ |+-+| |
| ^ | |^ || |
void (*signal(int, void (*fp)(int)))(int);
^ ^ | ^ ^ || |
| +------+ | +--+| |
| +--------+ |
+----------------------------------+
由螺旋法则画出如上的线图,进而可分析:
从要判定的 signal 出发首次遇到 ( 左括号,表示 signal 是一个函数,入参为 int 和 ...
此处需要需要进一步运用螺旋法则先确定 fp 的含义,才能进而确认 signal 这个函数的完整入参。所以从 fp 了发进行一次子螺旋。
因为需要优先解析括号括起来的部分,所以转一圈回来首次遇到的是 *,由此 fp 是一个指针。
继续解析 fp,遇到 (,所以 fp 是一个指向函数的指针,这个函数接收一个 int 类型的入参。
继续下去,遇到 void,所以 fp 是一个指向函数的指针,这个函数接收一个 int 类型的入参并且返回值为空。
至此完成了 fp 的解析,可以知道 signal 的类型为:
路径跑到 signal 的螺旋中,遇到 *(紧邻 signal 左边),所以 signal 是
再继续,遇到 (,接上面,返回值为指向另一函数的指针,被指向的这个函数接收一个 int 入参。
最后,遇到 void,signal 返回值指向的这个函数的返回值为空。
最后捋一下 signal 的完整类型为:接收一个 int,一个指向接收一个 int 并且返回值为空的函数的指针,这两个参数的函数,并且返回值为指向一个接收 int 型返回为空的函数...Orz。
成员函数的判定
螺旋施法没有给出在 const 参与的情况下的判定,不过因为 const 默认修饰紧邻其左边的元素,如果右边无元素,则修饰左边的元素。因此只需要将 const 和它修饰的元素作为整体来看,就还是可以使用螺旋法则的。
考察如下语句:
const int*const Method3(const int*const&) const;当函数后面紧跟一个 const 时,表示该成员函数的作用域内 *this 是常量,即无法在该函数体内对所类的实体进行修改。
下面对上面的语句进行分析:
相关资源
总结
以上就是我在处理客户端真实IP的方法,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C/C++中extern关键字详解在C/C++编程过程中,经常会进行变量和函数的声明和定义,各个模块间共用同一个全局变量时,此时extern就派上用场了。定义e
C++中引用与指针的区别实例详解引用是从C++才引入的,在C中不存在。为了搞清楚引用的概念,得先搞明白变量的定义及引用与变量的区别,变量的要素一共有两个:名称与
C++中静态局部变量实例详解以前经常使用和了解static作用在全局变量前,以至于甚至把static当做全局变量的代名词,但是其实static还可以作用于局部变
C++this指针详解this是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址)。通过this,可以访问当前对象的成员变量和成员
C++析构函数与变量的生存周期实例详解这篇介绍了析构函数,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你