C++编程规范 3 函数
来源:互联网 发布:阿里云 代码托管 编辑:程序博客网 时间:2024/06/05 09:22
3 函数
3.1 内联函数
规则3.1 内联函数(inline function)小于10行
说明:内联函数具有一般函数的特性,它与一般函数不同之处只在于函数调用的处理。一般函数进行
调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,
是将调用表达式用内联函数体来替换。
内联函数只适合于只有1~10行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对
来说微不足道,也没有必要用内联函数实现,一般的编译器会放弃内联方式,而采用普通的方式调用
函数。
如果内联函数包含复杂的控制结构,如循环、分支(switch)、try-catch等语句,一般编译器将该函数
视同普通函数。虚函数、递归函数不能被用来做内联函数。
规则3.2 使用内联函数代替函数宏
说明:C++中也支持宏的功能,但是宏有其自身固有的缺陷(例如无法对参数进行类型检查),因此,能
使用内联函数的地方,一定不使用宏。
示例:
//较好的例子:
template <class TYPE_T> inline TYPE_T& max(TYPE_T& x, TYPE_T& y)
{
return (x>y)?x:y;
}
//不好的例子:
#define MAX(x,y)((x)>(y)?(x):(y))
例外:一些通用且成熟的应用,如:对new, delete的封装处理,可以保留对宏的使用。
建议3.1 内联函数应该放在头文件中声明,而且在函数前添加inline关键字
说明:内联函数的定义对编译器而言必须可见,以便在调用点将函数展开。放在头文件中可以保证对
编译器可见,修改或者删除内联函数时,重新编译使用该头文件的所有源文件。
建议3.2 内联函数的实现放在独立的文件
说明:确保接口清晰。如果使用者和维护者看见声明包含大量的内联实现,会干扰他们的思维,降低
声明的可读性和可维护性。所以除了最简单的成员存取函数外,其他较为复杂内联函数的实现放到独
立的头文件中(建议使用.inl为扩展名),在声明头文件的最后include。
//cpp_rule.h
#ifndef CPP_RULE_H
#define CPP_RULE_H
class CppRule
{
public:
inline inlineFunction();
};
#include “cpp_rule.inl”
#endif //CPP_RULE_H
//cpp_rule.inl
#ifndef CPP_RULE_INL
#define CPP_RULE_INL
inline CppRule::inlineFunction()
{
//内联函数实现
}
#endif //CPP_RULE_INL
3.2 函数参数
建议3.3 入参尽量用const引用取代指针
说明:引用比指针更安全,因为它一定非空,且一定不会再指向其他目标;引用不需要检查非法的NULL
指针。
如果是基于老平台开发的产品,则优先顺从原有平台的处理方式。
选择const避免参数被修改,让代码阅读者清晰地知道该参数不被修改,可大大增强代码可读性。
建议3.4 消除未使用函数参数
说明:检查未使用的函数参数,确认是否需要使用该函数参数,如果不需要直接删除参数名。
当实现接口时,有一些参数没有被引用是相当常见的。编译器会发现未使用的参数,并产生一个警告,
有些组件甚至会认为这是一个错误。为避免发生如此情况,将未使用的参数使用/* 参数名 */ 语法将
其注释掉。
示例:
//好的例子:将localityHint参数名去掉,在注释中保留参数名以备参考和理解参数含义
pointer allocate(size_type numObjects, const void * /* localityHint */ = 0)
{
return static_cast<pointer>(mallocShared(numObjects * sizeof(T)));
}
建议3.5 尽量少用缺省参数
说明:使用参数的缺省值仅仅方便函数的使用,没有赋予函数新的功能,但降低函数的可理解。
缺省参数使得拷贝粘贴以前函数调用的代码难以呈现所有参数,当缺省参数不适用于新代码时可
能导致重大问题。
3.3 函数指针
建议3.6 尽量少用函数指针
说明:不少代码中还是用函数指针来实现一些功能扩展 (如封装),但函数指针难以理解和
难以维护,建议使用C++中派生与继承的基本用法,少用函数指针。
- C/C++编程规范--函数
- 华为C语言编程规范 函数、过程
- 【C语言】编程规范——函数
- C++编程规范 3 函数
- 【3】Windows客户端C/C++编程规范“建议”——函数调用
- 华为C语言编程规范(7)—函数、过程
- 第六章 高质量C编程规范函数设计
- Windows客户端C/C++编程规范“建议”——函数
- 华为C语言编程规范—函数、过程
- 读华为C语言编程规范(函数、头文件)
- 编程规范 --- 函数 过程
- [编程规范] 函数
- C语言编程规范3: 可读性
- C/C++编程规范
- C/C++ 编程规范
- C#.NET编程规范
- C#.NET编程规范
- c语言编程规范
- Linux Shell脚本资料
- Tesseract-OCR3.01语言库训练步骤
- C++编程规范 2 初始化和类型转换
- 关于爱情
- HDU 2544 最短路(各种最短路算法的实现)
- C++编程规范 3 函数
- Linux内核数据包处理流程-数据包接收(1)
- 解决tomcat启动时隐藏命令行
- C++编程规范 4 类
- C++编程规范 5 作用域、模板和C++其他特性
- ZZ 常用算法经典代码(C++版)
- 使用AES算法对文件进行加密/解密的操作(JAVA)
- C++ 6 资源分配和释放
- 一个是阆苑仙葩,一个是美玉无瑕