1. 我们都知道,#define PRICE 30 是预编译处理器进行预编译的时候执行的,无法在编译器进行编译的过程中看见,因此,当编译出错的时候,通常错误信息是提到30,而不是PRICE,因此程序员很难定位到出错的位置。

  解决方法是以const代替#define:const int Price = 30; Price肯定可以被编译器看到,因此不会导致上述错误。

  2. 为了将常量的作用域限定于一个类中使用,并且只有一份数据,通常定义一个static成员变量(#define无法做到这点):

    class A

    {

      private:

        static const int Count = 5;  // const声明式

        int stu[Count];        // 使用该const

    };

   Count是一个声明式而非定义式,如果要使用定义式,通常定义如下:const int A::Count; // 不要赋值,因为声明时已赋初值。将定义式放在实现文件,而不是头文件中。

  3. enum可以代替const在2中的实现, enum { Count = 5 }; 此外enum还可以约束Count不被pointer, reference所指向。这也是template metaprogramming的基础技术。

  4. 关于#define的一个误用就是实现宏,macros看起来像个函数,但是不会导致函数调用带来的额外开销。

    #define MAX(a, b) max( (a) > (b) ? (a) : (b)) // 千万不要忘记括号

  光看到这个宏,我就头大了,除了会带来忘记括号的风险之外,还会产生你意想不到的错误结果:

    int a = 3, b = 1;

    MAX(++a, b)        // a被累加2次

    MAX(++a, b + 10)    // a被累加1次

  Oh,my god!!! a的累加次数竟然取决于a所比较的对象!!!通常为了避免错误,我们都是通过inline来实现的:

  template <typename T> inline void Max(const T& a, const T& b)

  {

    f(a > b ? a : b);

  }

  怎么样,是不是轻松多了?此外还能设置inline的访问权限,#define永远都无法达到这点。

  请记住:对于单纯的常量,最好用const, enum替换#define。

      对于类似于函数的宏,最好用inline替换#define。

转载于:https://www.cnblogs.com/nchxmoon/archive/2012/05/22/2513933.html

2.尽量用const, enum, inline代替#define -- Prefer const, enum, inline to #define.相关推荐

  1. define() vs const 该如何选择?

    使用 define(),除非考虑到可读性.类常量.或关注微优化 1.在 PHP 中是使用 define() 函数来定义常量,PHP 5.3.0 以后,PHP 中也能够使用 const 关键字来声明常量 ...

  2. php定义常量 define vs const

    常量一旦定义就不能在改变或者取消. 在php中定义常量可以使用define()函数,在php5.3之后同样可以使用const关键字来定义常量. define 和 const的区别 语法区别 // 使用 ...

  3. #define与const的差别

    #define与const的差别 虽然他们在使用中感觉"差不多",但是他们在实现上有什么区别? 请看下面的代码: #define T 13 /*用#define定义的一个常量T*/ ...

  4. PHP的define与const

    总结 运行时间:在于const会在代码编译时定义一个常量,而define则是在代码运行时才定义一个常量 函数内外:const不能在函数内使用,可以作为类静态属性:define可以在函数内也可以在函数外 ...

  5. define、const、typedef区别

    1.define与const的区别 define生效与预处理阶段,const生效与编译阶段.预处理在编译之前,预处理器将代码中的宏统一替换为指定的字符 .从语义上讲,const是声明一个不可修改的数据 ...

  6. [翻译]PHP中define()和const定义常量的区别

    在PHP中可以通过define()和const两种方式定义常量 可是在开发中我们应该什么时候用define()定义常量,什么时候用const定义常量? 这两种方式定义常量的主要区别是什么? 从5.3版 ...

  7. #define与const定义常量的区别

    首先,#define 宏定义,使用方法如下: 1 #define PI 3.14159 2 3 #define MAX(a,b) a>=b?a:b const使用方法 const [常量类型] ...

  8. arduino中 #define、const和int 的差别

    首选我们要了解到的一个信息是arduino板子上的两个参数SRAM:2KB,Flash:32KB; 对应到我们使用的电脑呢,你可以认为SRAM是我们的内存,而Flash由是硬盘.先把这个理解清楚. # ...

  9. c语言 define和int,C语言中define与const的用法区别分析

    其实这个是困惑了我好久的问题,没想到在上机课做到的题里找到了答案--我的困惑是:#define与const到底有什么区别. 题目:  代码如下 复制代码 #define N 2 #define M N ...

最新文章

  1. Python:SQLMap源码精读—基于错误的盲注(error-based blind)
  2. eclipse Plugin execution not covered by lifecycle configuration:maven.***.plugin
  3. Angular自定义structural指令的实例化过程以及set方法的调用
  4. 图形处理:betweeness中心性– neo4j的密码与graphstream
  5. java水印图片_JAVA实用案例之图片水印开发
  6. C语言工作笔记-函数指针的使用(补充C回调系统)
  7. 将本地项目上传到Github的两种方式 1.在线上传 2.使用Git客户端上传
  8. win7下安装 LINUX虚拟机
  9. 洛奇 服务器文件,【公告】电信三区服务器合并说明...
  10. C语言计算文件MD5
  11. JSP中的坑(一):一个空格都不能少
  12. 遥感计算机的分类原理,遥感图像的计算机分类
  13. java ad freeradius_freeradius集合mariadb+深信服的AC做实名认证
  14. 情侣推送早安问候之小程序订阅通知模板推送 (出现在消息列表的服务通知)
  15. 微信小程序:同名在线查询系统
  16. 慕思618静悄悄,暴利生意做不下去了?
  17. python中%是什么意思_在python中%是什么意思
  18. 红楼梦词云制作(带背景)
  19. python:汽水瓶
  20. 一文看懂财务数据的分析方法

热门文章

  1. bootstrap表单拖拽生成器插件_web前端常用插件、工具类库汇总,新手必收藏!!!...
  2. c语言 勒让德多项式,2406: C语言习题 求n阶勒让德多项式(示例代码)
  3. mysql drop 几十g的表_MySQL Drop 大表的解决方案
  4. oracle12图书馆,Oracle图书馆管理系统
  5. php 检查数据库查询结果,php数据库连接、查询、显示结果的小例子
  6. qt 二次开发 研华daq_研华DAQ数据采集卡编程
  7. mysql索引久了需要重新_mysql索引更新要多久
  8. Openstack 一键安装部署 单节点
  9. sql server实例内存使用统计
  10. SpringBoot2.0使用Spring WebFlux之HelloWord篇