C++中的Bitflag枚举

sol*_*old 2 c++ enums type-systems bitflags

使用枚举在C++中存储位标志有点麻烦,因为一旦枚举值被OR化,它们就会松开它们的枚举类型,这会导致错误而不进行显式转换.

这个问题的接受答案表明|运营商超载:

FlagsSet operator|(FlagsSet a, FlagsSet b) 
{ 
    return FlagsSet(int(a) | int(b)); 
}
Run Code Online (Sandbox Code Playgroud)

我想知道这种方法是否有任何运行时影响?

Aar*_*ron 5

运行时对正确性的影响?不 - 这应该是你想要的.

运行时对速度的影响?我希望任何体面的编译器都能正确地优化这个版本,以适应发布版本的最小指令数量(尽管你可能想要添加inline以确保).

  • +1.关于`inline`:智能编译器将自行决定忽略关键字和内联代码; 如今,出于性能原因内联标记函数通常是无用的.然而,假设函数是在头文件中定义的,添加`inline`有很多不同的原因. (2认同)