C++ 变量判定的螺旋法则
2019-09-25 23:47
2041 查看
C++ 中一个标识符配合着各种修饰界定符,使得标识符的本意不那么直观一眼就能看出,甚至需要仔细分析,才能知道该标识符的具体你含义。 比如: void (*signal(int, void (*fp)(int)))(int); 其中 signal是什么? 螺旋法则对于如何进行变量的辩识,有个非官方的 “顺时针/螺旋法则(Clockwise/Spiral Rule)” 可用来帮助辩识。 该法则的内容,简单来说,为了搞清楚一个未知标识符的含义,我们可以:
实地演练一个简单的示例先从一个简单的开始,判定如下语句中 str的含义: +-------+ | +-+ | | ^ | | char *str[10]; ^ ^ | | | +---+ | +-----------+ 根据螺旋法则,如上面线图标识所示,
进阶回到文章开头那个语句,来判定其中 signal的含义。 +-----------------------------+ | +---+ | | +---+ |+-+| | | ^ | |^ || | void (*signal(int, void (*fp)(int)))(int); ^ ^ | ^ ^ || | | +------+ | +--+| | | +--------+ | +----------------------------------+ 由螺旋法则画出如上的线图,进而可分析:
signal的螺旋中,遇到 *(紧邻 signal左边),所以 signal是
int类型的入参并且返回值为空 (,接上面,返回值为指向另一函数的指针,被指向的这个函数接收一个 int入参。 void, signal返回值指向的这个函数的返回值为空。 最后捋一下 signal的完整类型为:接收一个 int,一个指向接收一个 int并且返回值为空的函数的指针,这两个参数的函数,并且返回值为指向一个接收 int型返回为空的函数...Orz。 成员函数的判定螺旋施法没有给出在 const参与的情况下的判定,不过因为 const默认修饰紧邻其左边的元素,如果右边无元素,则修饰左边的元素。因此只需要将 const 和它修饰的元素作为整体来看,就还是可以使用螺旋法则的。 考察如下语句: const int*const Method3(const int*const&) const; 当函数后面紧跟一个 const时,表示该成员函数的作用域内 *this是常量,即无法在该函数体内对所类的实体进行修改。 下面对上面的语句进行分析:
相关资源 |
相关文章推荐
- 顺时针螺旋法则(clockwisespiral rule)教你认变量类型
- 顺时针螺旋法则(clockwise/spiral rule)教你认变量类型
- 顺时针螺旋法则(clockwise/spiral rule)教你认变量类型的实践
- 顺时针螺旋法则(clockwise/spiral rule)教你认变量类型
- c++作用域运算符用法(全局变量和局部变量)
- 深入理解C++中变量的存储类别和属性
- C++ 基本语法之变量(指针)与数据类型(占用字节大小)
- [转]C++ const变量使用技巧总结
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- c++ lambda表达式捕获变量参数
- C++编码器军规(004):保持类成员变量定义和初始化的顺序一致
- C++特殊成员变量(静态、常量、引用)的初始化方法
- c++学习(2.2)变量
- C/C++笔试系列--如何利用成员变量作为成员函数的默认参数
- 《coredump问题原理探究》Linux x86版6.2节C++风格数据结构内存布局之有成员变量的类
- c++中引用变量的使用
- 简单介绍C++中变量的引用
- c++高级---C++ 类中特殊的成员变量(常变量、引用、静态)
- C++中成员变量默认private
- C++ 中的 const 类型变量