如何实现仅切换操作符的位标志条件添加/移除单行写法?
可行实现方案
首先纠正一个关键细节:移除标志的正确操作应该是 flags &= ~EFlags::FLAG(而非直接&= EFlags::FLAG,后者是保留该标志位,并非移除)。
针对你希望**flags左、EFlags::FLAG右,仅通过三元逻辑切换运算行为**的需求,C++不支持直接将运算符作为三元表达式的返回值,但可以通过构造统一的运算表达式实现结构一致的单行代码:
flags = b_condition ? (flags | EFlags::FLAG) : (flags & ~EFlags::FLAG);
方案优势
- 结构高度统一:18行代码格式完全一致,均为
flags = [条件] ? (flags | 目标标志) : (flags & ~目标标志);,可读性大幅提升 - 无需函数封装:直接通过原生位运算实现,无额外函数调用开销
- 逻辑直观:一眼就能明确条件为真时添加标志(位或操作),条件为假时移除标志(位与取反操作)
内容的提问来源于stack exchange,提问作者Eshy
相关产品推荐
相关产品推荐

