`
kmplayer
  • 浏览: 497059 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款1:尽量以const和inline取代#define

 
阅读更多

1,意思就是"尽量以编译器(compiler)"取代预处理器(preprocessor)"
2,如果你这么做:
#define PI 3.14
PI可能在编译之前就先被预处理器移走了,也没有机会被编译器看见.结果,PI没有进入符号表.

一个既简单又有效率的做法:使用常量.
const double PI = 3.14;

3,有时,我们需要定义一个class的专属常量,即这个常量的生存空间局限于class内.
我们可以这么做:
class GamePlayer
{
public:
static const int NUM = 5; //常量的声明和初始化,不是定义
int scores[NUM]; //常量的运用
}
const int GamePlayer::NUM; //这里才是定义

4,另一个误用#define的常见例子:实现函数宏.
如:
#define max(a,b) ((a) > (b) ? (a) : (b))
加上括号,也有问题,看下面的动作:
int a = 5, b = 0;
max(++a, b);//a会被累加两次
max(++a, b+10); //a被累加一次

使用inline函数,可以获得宏带来的高效率以及函数带来的可预期行为和引数型别检验.
如:
template<class T>
inline const T& max(const T& a, const T& b)
{
return a > b ? a : b;
}

5,但是预处理器还是需要.
#include和#ifdef/#ifndef在编译控制过程中依旧扮演重要的角色.
分享到:
评论

相关推荐

    const #define inline

    const #define inline的用法及区别

    C语言中const与#define的区别

    本文主要介绍了C语言中const与#define的区别,希望对你的学习有所帮助。

    Effective.C++.中文第二版.50条款doc文档.chm

    条款1:尽量用const和inline而不用#define 条款2:尽量用而不用 条款3:尽量用new和delete而不用malloc和free 条款4:尽量使用c++风格的注释 第二章 内存管理 条款5:对应的new和delete要采用相同的形式 条款6:析构...

    C语言 #define用法集锦[修正版]

    1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME 就定义好了,它代表1000,如果在程序里面写 if(i){.........} 编译器在处理这个代码之前会对MAXTIME 进行处理替换为1000。 这样的定义看起来类似于普通...

    Effective c++

    提高编程效率的50条建议 条款1:尽量用const和inline而不用#define 条款2:尽量用而不用 条款3:尽量用new和delete而不用malloc和free 内存管理的建议 设计与说明的建议 继承与面向对象的设计 杂项

    EffectiveC++终稿44__tagged_2019-06241

    Effective C++目 录一.让自己习惯C++ 1条款02:尽量以const,enum,inline替换#define 11)以const替换#defin

    C语言编程技巧 关于const和#define的区别心得

    尽量用const和inline而不用#define这个条款最好称为:“尽量用编译器而不用预处理”,因为#define经常被认为好象不是语言本身的一部分。这是问题之一。再看下面的语句:

    Effective C++

    条款1:尽量用CONST和INLINE而不用#DEFINE 条款2:尽量用而不用 条款3:尽量用NEW和DELETE而不用MALLOC和FREE 条款4:尽量使用C++风格的注释 2、内存管理 条款5:对应的NEW和DELETE要采用相同的形式 条款6:析构函数里对...

    c++ 尽量不要使用#define 而是用const、enum、inline替换。

    例如:这里程序文件开头有如下#define语句 代码如下: #define N 10 #define PI 3.14 #define MAX 10000 #define Heigth 6.65 … … 假设这里程序运行出错误,而且就是在我们使用这些常量有错误,此时编辑器应该会抛...

    C++中const与#define的利弊分析

    C++中const与#define的区别如下: 用#define MAX 255定义的常量是没有类型的,所给出的是一个立即数,编译器只是把所定义的常量值与所定义的常量的名字联系起来,define所定义的宏变量在预处理的时候进行替换,在...

    Effective_C++_笔记

    1.2 条款02:尽量以const,enum,inline替换#define 这个条款或许可以改为“宁可用编译器替换预处理器”。 通常C++要求你对所使用的任何东西提供一个定义式,但如果它是个class专属常量 又是static且为整数类型...

    const和define用法

    介绍CONST和DEFINE的区别,CONST有取代DEFINE的趋势

    浅谈C++中的几个关键字static,const,inline.doc

    浅谈C++中的几个关键字static,const,inline.doc 浅谈C++中的几个关键字static,const,inline.doc

    递归枚举目录下所有文件并显示大小KB/MB/GB自动换算

    B = 1; //byte KB = 1024 * B; //kilobyte MB = 1024 * KB; //megabyte GB = 1024 * MB; //gigabyte begin if bytes &gt; GB then result := FormatFloat('#.## GB', bytes / GB) else if bytes &gt; MB then ...

    饭客钻石-带网络验证带压力测试

    #define RECALC_NEXT_PRESSED 1 #define RECALC_ITEM_SELECTED 2 #define RECALC_RESIZED 3 #define RECALC_FIRST_PRESSED 4 #define RECALC_LAST_PRESSED 5 #define RECALC_EDIT_RESIZED 6 #define RECALC_CLOSE_...

    Effective C++(第三版)

    条款02:尽量以const, enum, inline替换 #define prefer consts,enums, and inlines to #defines. 条款03:尽可能使用const use const whenever possible. 条款04:确定对象被使用前已先被初始化 make sure that ...

    effective stl 中文 pdf

    条款1: 仔细选择你要的容器 条款2: 小心对“容器无关代码”的幻想 条款3: 使容器里对象的拷贝操作轻量而正确 条款4: 用empty来代替检查size是否为0 条款5: 尽量使用范围成员函数代替他们的单元素兄弟 条款6: ...

    Effective C++ 中文版

    条款02:尽量以const,enum,inline替换#define 条款03:尽可能使用const 条款04:确定对象被使用前已先被初始化 2.构造/析构/赋值运算 条款05:了解C++默默编写并调用哪些函数 条款06:若不想使用编译器自动成生...

    Effictive STL CHM中文版

    条款1: 仔细选择你要的容器 条款2: 小心对“容器无关代码”的幻想 条款3: 使容器里对象的拷贝操作轻量而正确 条款4: 用empty来代替检查size是否为0 条款5: 尽量使用范围成员函数代替他们的单元素兄弟 条款6: ...

    CONST和DEFINE的异同

    介绍CONST和DEFINE的区别,CONST有取代DEFINE的趋势

Global site tag (gtag.js) - Google Analytics