或者是函数参数c ++

时间:2014-06-04 21:39:08

标签: c++ function flags

我注意到许多函数都采用参数或“标志”,如下所示:

foo(BIG | RED | SWEET);

文件中较早前BIGREDSWEET已编辑#define的位置如下: #define BIG 0x1

我想实现我自己的函数,这些函数采用上面的参数,但我担心OR两个数字可能会与OR两个不同的数字相同。定义这些变量的正确方法是什么,所以没有碰撞?

2 个答案:

答案 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 ++方法远比那些十六进制定义更令人愉悦