C++函数范式
来源:互联网 发布:工业企业数据库 编辑:程序博客网 时间:2024/05/20 17:25
C++作为一门有函数的语言,函数范式不可获取,接下来是我对C++函数定义的一些建议,有时候也许有大用呢?
说之前,我们先来看一下背景,首先,大部分IDE都支持跳转至声明这一条,而有些可以利用鼠标,直接查看函数定义以及函数四周的注释。
那么,接下来不可或缺的就是针对函数的注释了。我们先看一个如下的定义:
void cr(int*&,int,int);……void cr(int* &a,int b,int c){if(b>c){a=new int[b][c];}else{a=new int[b][c];}}
该函数的作用诸位都看得出来,创建一个二位数组,并将其指针赋值到第一个参数a上。
但是,这是一个非常非常不好的行为。
首先,这个函数的函数名就非常莫名其妙,谁知道cr是什么意思,create resources?cut rock?
因此,函数范式的第一条就是,函数名不能莫名其妙,也不能过长,比如该函数,如果使用createresources作为函数名是很不好的,因为单词太长,导致无法断开词与词之间的空格,此时,把单词中的空格改成“_”是个好办法,这样函数名就成了create_resources,好断句。
然而有时,一些更为快捷的方法是个好做法,比如,由于resource这个单词经常出现,有时适当简化也是可行的,比如create_re,又或者,在全部拼写的基础上写一个等价的简短的宏,也是非常有用的做法。
那么接下来就是关于参数的部分了。
需要重视的一点是,声明时在参数前边加上in与out是非常好的做法。尽管vs丧心病狂的为in与out都加上了声明,我们就不用这样做了,直接
#define Out ;//传入并进行修改的参数#define In ;//传入的参数
此类空定义使得我们可以在任何位置随便添加而不会报错,因此,create_resources函数会变成这样:
void create_resources(Out int* &,In int,In int);
有时,因这看起来没什么用的声明,一个函数能被轻而易举的理解。
另外,有时候给一个类型命名多个别名也是个好主意,win就常用这种办法,所以int的别名无穷尽也。
另外,作为一个好函数,有时候加上noexcept关键字也是好习惯,但是因为函数中的new是可以引发错误的,不加为妙。
说完了声明,我们看注释。
声明旁边加上注释是个非常非常非常好的习惯,这能有效的说明函数是干什么的,哪怕是一行注释,也比一个什么都没的函数cr好的多。
接下来针对函数体我们做最后的讨论。
一个函数体最为重要的不是内容,而是格式,一个格式就可以使人发疯的函数已经完全没有了去看的价值,对于强迫症来说似乎还有修改的价值,但是我可不是强迫症。
这种完全没有tab的函数我见一个删一个,见着俩直接把库给全删了,放心我说到做到,尽管我见过的库还没一个是这样的。
自动换行和自动加tab乃是神器啊!我真的不明白为什么加个tab都不行!
另外——这个函数并没有涉及的——有些微操作旁边必须加注释,比如以下:
template<class t>void numsdie(Out t x){ x=x<<(sizeof(t)<<3);}
这玩意的意义就是把一个类的所有位清零,比如我们传入一个int型的变量m,其值为1934,我们知道sizeof返回一个类型的大小,但是按byte算而不是bit,因此左移三位也就是乘8(左移就是乘8)以后就是该类型的全部位,所有这会直接清零——
但是谁知道这什么意思啊?你告诉我nums die是什么鬼?用位操作都比这直接了当100倍啊!
所以说,有时候在旁边加上注释是个非常好的习惯,哪怕不解释过程,只有解释目的,也是极好的,毕竟一眼没有看出来这什么意思的人第二眼恐怕就再也看不出来了。
函数体中还有值得注意的一点就是资源的命名,这和函数命名差不多,只要不是abcd就足够了,弄长了反而难以理解。
最后的最后,模板作为c++不可或缺的一环,类型名字的定义并没有什么强制要求,如果有,也只用在旁边在加上一行注释就行了。
遵守这些准则,也算是往高级c++工程师的一步吧!
另外,千万不能不点收藏按钮!o(>﹏<)o不要啊
- 函数依赖及范式
- 数据库函数依赖、范式
- 1.3.1 函数范式
- 函数范式编程
- C++函数范式
- 编程范式--c语言
- C语言BNF范式
- 编程范式19 函数范式与Scheme
- 数据库范式及函数依赖
- 函数依赖和数据库范式
- 关系模式,函数依赖,范式
- 函数依赖及数据库范式
- 函数依赖、键和范式
- 第一范式、第二范式及第三范式的定义与举例 and SQL常用函数集锦
- 范式
- 范式
- 范式
- 范式
- Unity事件系统
- 十大心理效应
- NVIDIA Jetson TX2编译内核解决无法使用游戏手柄XBOX360的问题
- 51Nod-1181-质数中的质数(质数筛法)
- The Google File System : part8 RELATED WORK and CONCLUSIONS and ACKNOWLEDGMENTS
- C++函数范式
- 3Des加解密,压缩文件
- STL__set让你彻底搞清楚set的特性
- web渗透编码
- 二叉排序树的C++实现
- [Leetcode] #239 Sliding Window Maximum
- 错误The resource identified by this request is only capable of generating(HTTP Status 406)
- 深度学习算法调优trick总结
- 关于JVM对象分配的小实验