我注意到许多函数都采用参数或“标志”,如下所示:
foo(BIG | RED | SWEET);
文件中较早前BIG
,RED
和SWEET
已编辑#define
的位置如下:
#define BIG 0x1
我想实现我自己的函数,这些函数采用上面的参数,但我担心OR
两个数字可能会与OR
两个不同的数字相同。定义这些变量的正确方法是什么,所以没有碰撞?
答案 0 :(得分:0)
通常标志将是2的幂,确保每个组合都是唯一的。
答案 1 :(得分:0)
通常使用以下2 hex模式的幂来避免与标志冲突:
#define A (0x0000)
#define B (0x0001)
#define C (0x0002)
#define D (0x0004)
#define E (0x0008)
#define F (0x0010)
#define G (0x0020)
#define H (0x0040)
#define I (0x0080)
#define J (0x0100)
...
或者更好的是,使用枚举:
enum Flags
{
A = 0,
B = 1 << 0,
C = 1 << 1,
D = 1 << 2,
E = 1 << 3,
F = 1 << 4,
...
}
这种C ++方法远比那些十六进制定义更令人愉悦