如果我有以下代码:
#define POUND_PER_DOLLAR 73
int nPound = 4 * POUND_PER_DOLLAR;
和
int POUND_PER_DOLLAR = 122;
int nPound = 4 * POUND_PER_DOLLAR;
是否存在使用一个比另一个更适合的情况?
答案 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的缺点: 方法,