条款02:尽可能使用const, enum, inline替代define

原创 2012年03月23日 12:57:21

(1)#define ASPEC_RATIO 1.653

替代为: constdouble AspectRatio = 1.653;

因为define名称ASPEC_RATIO也许从未被编译器看见,那么她就没有进入记号表,那么在获取错误信息的时候,就可能浪费时间去获得1.653的意思。

关于class的专属常量,为了将常量的作用域限制于class内,你必须让它成为一个成员,而为了确保此常量至多只有一根实体,你必须让他成为一个static成员,

classGamePlayer {

private:

         static const int NumTurns = 5;         //常量声明式

         int scores[NumTurns];

         …

};

然而你所看到的是NumTurns的声明式,而不是定义式,通常C++要求你对你所使用的任何东西提供一个定义式,但是如果它是一个class专属常量又是static且为整数类型,则需要特殊处理。定义式如下

const intGamePlayer::NumTurns;  //NumTurns的定义

 请把这个式子放在一个实现文件而不是头文件中,由于class常量已在声明时候获得初期,因此定义的时候不可以在设置初值。

         也可以使用枚举类型

         classGamplayer {

         private:

                   enum{ NumTurns = 5; };

                   intscores[NumTurns];

                   …

         };

 

(2)template<typename T>

          inline void CallWithMax(const T&a, constT&b)

          {

                   if(a> b? a : b);

    }

(3)对于单纯常量,最好以const对象或enums替换#define

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

条款02:尽量以const、enum、inline替换#define

少用#define!!
  • u011141102
  • u011141102
  • 2015年04月16日 12:37
  • 229

条款02:尽量以const,enum,inline替换#define

1.用const替换#define(宁可编译器替换预处理器) 理由:假设#define sign 1.653,当你使用这个宏定义的时候,在预处理期间在你使用sign的地方就被替换为1.653,sig...
  • IT_iverson
  • IT_iverson
  • 2017年11月09日 10:55
  • 55

条款02:尽量以const ,enum,inline 替换 #define

这个题目的意思深了讲就是尽量用编译器代替预处理器。 当然有些功能是暂时无法取代的,比如说#include,#ifdef/#ifndef。(最后提一下,先讲条款) 思路是这样的 用const(常量...
  • code_hrbeu
  • code_hrbeu
  • 2016年06月10日 21:15
  • 133

条款02:尽量以const,enum,inline替换#define

1.内置类型用const替换#include 2.字符串类型用const的两种方式 3.数组的大小最好用enum这样给出 4.宏表达式#define CALL_WITHMAX(a,b) f(...
  • ganxiang2011
  • ganxiang2011
  • 2015年05月08日 15:49
  • 430

C++基础:#define宏定义和inline,const,enum的区别

#defind 宏定义函数 和 inline 函数的区别: 宏看起来像函数,但不会招致函数调用带了的额外开销。 1.inline函数可运行调式,宏定义函数不能调试 2.inline函数进行...
  • wjxxaut
  • wjxxaut
  • 2016年08月04日 13:58
  • 310

尽量使用const、enum、inline代替#define

1、 # define A 1.6 宁可使用编译器也不使用预处理,原因: 当使用预处理时,记号名称A也许从未被编译器看见(因为预处理是在编译阶段进行替换),所以一旦出现编译错误,(如果A被...
  • GoJawee
  • GoJawee
  • 2017年03月12日 11:01
  • 176

条款2:尽量以const,enum,inline 替换 #define

条款2:尽量以const,enum,inline 替换 #define
  • hualicuan
  • hualicuan
  • 2014年05月21日 19:32
  • 336

条款2:尽量以const,enum,inline替换#define

这一条款也被称作:宁可用编译器替换预处理器。对于一般用#defined定义的常量,可以使用const类型代替。但是要注意两种特殊情况:假如我们要在头文件中定义一个不能被修改的字符串,那么需要使用con...
  • u011939264
  • u011939264
  • 2016年08月25日 21:00
  • 161

条款02:尽量以consts,enum,inline替换#define

// 条款02: 尽量以const,enum,inline 替换#define // 尽可能的使用编译器而不是预处理器 #include // 1. 定义class专属常量(用const代替de...
  • u011726005
  • u011726005
  • 2017年08月06日 18:46
  • 53

《effective c++》条款二:尽量以enum,const,inline替换#define

/* 以下,是对const,enum,inline的一系列测试 -----《effective c++》条款二 : 尽量以const,...
  • codedoctor
  • codedoctor
  • 2017年02月25日 11:29
  • 335
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:条款02:尽可能使用const, enum, inline替代define
举报原因:
原因补充:

(最多只允许输入30个字)