邀朋友种豆,一起分享吧
喜欢购买正品行货?那就去品牌街

C++高效率编码的15条建议

来自:种豆 时间:2017-12-29 阅读:444次 原文链接

    每个C++/C程序常分为两个文件,一个用于保存程序的声明(在C++里面有时也用.hpp来表示头文件,但是一般情况下常用.h),一个用于保存文件的定义。

1、版本与版权的声明

    以上声明放置在文件的开头,含以下内容:
    <1>.版权信息
    <2>.文件名称,标识符,摘要
    <3>.当前版本号,作者/修改者,完成日期
    <4>.版本历史信息

2、头文件的结构

    <1>.开头处的版权和版本说明
    <2>.预处理块
    <3>.函数和类结构声明等.

    为防止头文件被重复定义,应当用ifndef/define/endif结构产生预处理块。
    不提倡使用全局变量,尽量少使用如:extern int value

    头文件的声明示例如下:

         #ifndef graphics_h
         #define graphics_h
         #include <math>
         #include "myheader.h"
         class classname
         {
          private:
            //............
          protected:
           //.............
          public:
           //.............
         }
         #endif

3、命名建议

    <1>.在静态变量前加上s_,如:s_initValue
    <2>.在全局变量前加上g_,如:g_howmuch
    <3>.类的数据成员前加上m_,如:private int m_val

4、布尔变量与零值比较

  <1>.不可将布尔变量与true,false,0或1直接比较。根据布尔类型语义,零值为假,任何非零值记为真,假设有布尔变量flag,其与零值的标准比较语句如下:
   if (flag)...   表示flag为真
      if (!flag)...  表示flag为假
   不良风格为:if (flag==true)...或if (flag==0)...

5、指针与零值的比较

    <1>.应将指针变量用"=="或!=与null比较:
  标准比较语句为:
      1. if (p==null)...
      2. if (p!=null)...
    不要写成:if (p) 或 if (!p)

    <2>.if (null==p)和if (p==null)是等价的。
    实际上为了避免少写一个=变成赋值,因此还提倡用前者表达。

    <3>.Return (Condition?x:y) 这是一个三目运算表达方式。

    <4>.在程序中,可以在异常模块加入return EXIT_FAILURE或EXIT_SUCCESS,
   这两个都包涵在头文件<stdlib.h>当中。

6、循环语句的效率问题

   c++/c中,for语句使用最常,后为while,最后为do (比较少用),提高循环体效率的方法是降低循环体的复杂性。
   建议:在多重循环中,若有可能,应将最长的循环放在最内层,最短的循环放在最外层,以减少cpu跨切循环层的次数。

7、goto语句

    对等goto语句,应该慎用,而非禁用。

8、const与#define

    const与#define的比较,前者更有优点,const常量有数据类型,而define没有,编译器可对前者进行类型安全检查,在c++中只使用const常量而不建议使用define宏变量。

9、枚举与常量

    建议在类中使用枚举常量实现在整个类中建立恒定的常量,枚举常量不会占用对象的内存空间,它们在编译时被全部求值,枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数如:PI=3.14159...

10、函数参数

    建议函数参数书写要完整,不要只写类型不写参数名,如果参数是指针,且公作输入用,则应在类型前加const以防止函数体内被意外修改。

11、const &

    若输入参数以值方式来传递参数,则宜改用const& 方式来传递,以省去临时的构造和析构过程,从而提高效率。

12、返回值的规则

    <1>.不要省略返回值的类型,若函数没有返回值,则函数应声明为void类型。
    <2>.不要将正常值和错误标志混在一起返回,正常值用输出参数获释,而错误标志用  return 返回.

13、函数内部实现的规则

    <1>.在函数入口处,对参数有效性进行检查。
    <2>.在函数体的出口处,对return 语句的正确性和效率进行检查。

14、return返回值注意事项

  <1>.return不可返回指向“栈内存”的指针或引用.因为该内存在函数体结束时被自动销毁。
    <2>.要搞清返回的究竟是值,指针还是引用。
    <3>.若函数返回值是一个对象,要考虑return语句的效率。

15、使用断言

    程序一般分debug版和release版,debug用于内部测试,release发行给用户使用,使用断言捕捉不应发生的非法情况。

 

 
关于种豆 ┊ 联系我们 ┊ 免责声明 ┊ 发帖须知 ┊ 请提意见 ┊ 站点地图
本站为个人爱好兴趣分享网站,不代表本人观点,如有侵权请联系QQ3033380280进行处理
sowsoy.com 版权所有 Copyright©2010-2021 备案号:蜀ICP备2020025376号-3
Email:sowsoy#hotmail.com