zoukankan      html  css  js  c++  java
  • (C++编程规范第17条)避免使用”魔数“

    1、摘要:

      程序设计并非魔数,所以不要故弄玄虚:要避免在代码中使用诸如42和3.14159这样的文字常量。它们本身没有提供任何说明,并且因为增加了难于检测的重复而使维护更加复杂。可以用符号名称和表达式替换它们,比如width * aspectRatio。

    2、讨论:

      名称能够增加信息,并提供单一的维护点,而程序中到处重复的原始数据是无名的,维护起来很麻烦。常量应该是枚举符或者const值,有合适的作用域和名称。

      经常会有此42可能非彼42的情形。更糟的是,如果程序员进行了一些心算(比如,”这个84是由5行代码前所用的42乘以2得到的“),那么以后需要用其他常量替换42的工作会变得既枯燥又易错。

      应该用符号常量替换直接写死的字符串。将字符串与代码分开(比如将字符串放入一个专门的.cpp文件或资源文件中),这样非程序员也能对其进行审查和更新,而且能够减少重复,还有助于国际化。

    3、示例:

      例1     重要的特定于领域的常量应该放在名字空间一级。

     const size_t PAGE_SIZE = 8192,
        WORDS_PER_PAGE = PAGE_SIZE / sizeof(int),
        INFO_BITS_PER_PAGE = 32 * CHAR_BIT;

      例2     特定于类的常量。可以在类定义中定义静态整数常量,其他类型的常量需要单独的定义或者一个短小的函数。

    //文件    widget.h
    class Widget
    {
            static const int defaultWidth = 400    //声明中提供的值
            static const double defaultPercent;   //定义中提供的值
            static const char* Name(){return "Widget";}
    };
    //文件    widget.cpp
    const double Widget::defaultPercent = 66.67;    //定义中提供的值
    const int Widget::defaultWidth;    //所需的定义
  • 相关阅读:
    JavaScript 中的面向对象编程
    LINUX --- echo修改GPIO状态
    Ubuntu安装海思SDK(转)
    一个C++版本的Sqlite3封装--SmartDb
    分享一个内网穿透工具frp
    opencv图片缩放与镜像
    和菜鸟一起学linux之DBUS基础学习记录(转)
    谈谈嵌入式系统中多进程设计与进程通信
    高效c/c++日志工具zlog使用介绍
    udevd启动失败问题
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5117351.html
Copyright © 2011-2022 走看看