使用define和变量之间的区别

时间:2014-08-01 13:05:58

标签: c++

如果我有以下代码:

#define POUND_PER_DOLLAR  73
int nPound = 4 * POUND_PER_DOLLAR;

int POUND_PER_DOLLAR = 122;
int nPound = 4 * POUND_PER_DOLLAR;

是否存在使用一个比另一个更适合的情况?

3 个答案:

答案 0 :(得分:3)

如果您需要地址,则需要一个变量:

void foo(int *);

foo(&POUND_PER_DOLLAR);         // must be an lvalue

如果需要常量表达式,宏(或至少是常量)将起作用:

char array[POUND_PER_DOLLAR];   // must be a constant expression

然而,最合适的结构可能是一个常数:

const int kPoundPerDollar = 73;
int nPound = 4 * kPoundPerDollar;

void bar(const int *);
bar(&kPoundPerDollar);                 // works
char c[kPoundPerDollar];               // also works

template <const int * P> struct X {};
X<&kPoundPerDollar> x;                 // also works

答案 1 :(得分:3)

都不是。 #define不是类型安全的,int是非常量的。这是您正在寻找的常数:

int const POUND_PER_DOLLAR = 122;

答案 2 :(得分:2)

#define identifier replacement
  

当预处理器遇到此指令时,它会替换任何指令   通过替换在代码的其余部分中出现标识符。这个   替换可以是表达,声明,块或简单   任何东西。简单地说,预处理器不能正确理解C ++   通过替换替换任何出现的标识符。

使用#define的缺点: 方法,

  1. 预处理器不理解任何c ++,它只替换 它,所以你冒着自己的风险
  2. 如果您使用调试器并且想要检查,则会使调试变得更加困难 变量的值
  3. 您必须小心重新定义宏