当前位置: 首页 > news >正文

C++语言编程规范-函数

01  

.1 内联函数

内联函数(inline function)小于 10 行

说明:内联函数具有一般函数的特性,它与一般函数不同之处只在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。内联函数只适合于只有 1~10 行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对 来说微不足道,也没有必要用内联函数实现,一般的编译器会放弃内联方式,而采用普通的方式调用函数。

如果内联函数包含复杂的控制结构,如循环、分支(switch)、try-catch 等语句,一般编译器将该函数视同普通函数。虚函数、递归函数不能被用来做内联函数。

02  

使用内联函数代替函数宏

说明: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 的封装处理,可以保留对宏的使用。

    03  

    内联函数的实现放在独立的文件

    说明:确保接口清晰。如果使用者和维护者看见声明包含大量的内联实现,会干扰他们的思维,降低声明的可读性和可维护性。所以除了最简单的成员存取函数外,其他较为复杂内联函数的实现放到独立的头文件中,复杂的内联函数的定义,应放在后缀名为-inl.h 的头文件中,在声明头文件的最后 include。

    示例:

      #ifndef CPP_RULE_H #define CPP_RULE_H class CppRule   public:    inline inlineFunction(); };   #include “cpp_rule-inl.h” #endif //CPP_RULE_H //cpp_rule-inl.h#ifndef CPP_RULE_INL_H#define CPP_RULE_INL_Hinline CppRule::inlineFunction()   //内联函数实现#endif //CPP_RULE_INL_H

      04  

      2 函数参数

      入参尽量用 const 引用取代指针

      说明:引用比指针更安全,因为它一定非空,且一定不会再指向其他目标;引用不需要检查非法的 NULL 指针。

      如果是基于老平台开发的产品,则优先顺从原有平台的处理方式。

      选择 const 避免参数被修改,让代码阅读者清晰地知道该参数不被修改,可大大增强代码可读性。

      05  

      建议 消除未使用函数参数

      说明:检查未使用的函数参数,确认是否需要使用该函数参数,如果不需要直接删除参数名。当实现接口时,有一些参数没有被引用是相当常见的。编译器会发现未使用的参数,并产生一个警告,有些组件甚至会认为这是一个错误。为避免发生如此情况,将未使用的参数使用/* 参数名 */ 语法将 其注释掉。

      示例:

        //好的例子: 将localityHint参数名去掉,在注释中保留参数名以备参考和理解参数含义pointer allocate(size_type numObjects, const void * /* localityHint */ = 0) return static_cast<pointer>(mallocShared(numObjects * sizeof(T))); }

        06  

        尽量少用缺省参数

        说明:使用参数的缺省值仅仅方便函数的使用,没有赋予函数新的功能,但降低函数的可理解。缺省参数使得拷贝粘贴以前函数调用的代码难以呈现所有参数,当缺省参数不适用于新代码时可能导致重大问题。

        07  

        3 函数指针

        尽量少用函数指针

        说明:不少代码中还是用函数指针来实现一些功能扩展(如封装),但函数指针难以理解和 难以维护,建议使用 C++中派生与继承的基本用法,少用函数指针。


        文章转载自:

        http://OLSrALdt.dzzjq.cn
        http://lwupM8Er.dzzjq.cn
        http://y9Hl1eUi.dzzjq.cn
        http://FckUEJJP.dzzjq.cn
        http://NyHIlg5H.dzzjq.cn
        http://tUO8ynYo.dzzjq.cn
        http://6qWEpLyj.dzzjq.cn
        http://xGNF4UCk.dzzjq.cn
        http://D6BuJtOi.dzzjq.cn
        http://E4cXJCXl.dzzjq.cn
        http://zwz9KDbD.dzzjq.cn
        http://tpoGMP6A.dzzjq.cn
        http://Gjf8qucB.dzzjq.cn
        http://6scNbcok.dzzjq.cn
        http://AKJTL0P9.dzzjq.cn
        http://rIaWkb8n.dzzjq.cn
        http://aqdS8YwG.dzzjq.cn
        http://RADymlOi.dzzjq.cn
        http://hNXD9OcS.dzzjq.cn
        http://FuiTnQwy.dzzjq.cn
        http://xfQmdxYD.dzzjq.cn
        http://sTK8zW1R.dzzjq.cn
        http://7yU52LkS.dzzjq.cn
        http://xFtrXYPa.dzzjq.cn
        http://dpU3xLIh.dzzjq.cn
        http://bPQCPkai.dzzjq.cn
        http://kMYHJNhm.dzzjq.cn
        http://fPe6C2S3.dzzjq.cn
        http://wktZkWwO.dzzjq.cn
        http://FnXuKJ9r.dzzjq.cn
        http://www.dtcms.com/a/373776.html

        相关文章:

      • 如何在 FastAPI 中优雅地模拟多模块集成测试?
      • 阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
      • 新型APT组织“嘈杂熊“针对哈萨克斯坦能源部门发起网络间谍活动
      • Windows 11 安装 Maven、配置国内镜像
      • 软件测试|STATIC 代码静态验证工具 C/C++ 工具链设置指南
      • JavaScript 行为型设计模式详解
      • 强化学习:从 Q-Learning 到 Deep Q-Network
      • 摄像头模块在运动相机中的特殊应用
      • 雷卯针对米尔MYC-YG2UL开发板防雷防静电方案
      • 专为石油和天然气检测而开发的基于无人机的OGI相机
      • pytest(2):测试用例查找原理详解(从默认规则到高级钩子定制)
      • Java 服务接口中解决跨域(CORS,Cross-Origin Resource Sharing)问题
      • 【VLNs篇】09:NavA³—理解任意指令,导航任意地点,找到任意物体
      • JS实现丝滑文字滚动
      • 小程序获取手机号完整流程 弹出框获取电话号码
      • Claude API 到智谱 API 迁移全流程教程(含兼容性对比)
      • 玩转Docker | 使用Docker部署Umbrel操作系统
      • 一客一策:Data Agent 如何重构大模型时代的智能营销
      • 一次用户请求的网络之旅
      • Java 泛型知识点
      • 天硕工业级SSD固态硬盘凭什么寿命更长?
      • IntelliJ IDEA 2023更新git凭据
      • 中小企业SAP B1 HANA部署全解析:成本与云端优势
      • pymodbus启动一个简单的modbus tcp client
      • 5G边缘计算:重构物联网开发新范式
      • CentOS操作系统虚拟机安装以及连接工具下载和远程连接工具远程连接
      • 计算机视觉案例分析之银行卡号识别
      • 【motion】音乐节奏特征:bpm与舞蹈的适配性
      • Spark 核心原理:RDD, DataFrame, DataSet 的深度解析
      • 三轴云台之电子换向技术篇