将位掩码类型与零进行比较的正确方法
Proper way to compare BitmaskType with zero?
根据BitmaskType
概念,实现必须确保以下语句是很好的:(列在 §17.5.2.1.3.4)
如果表达式 X 和 Y 不为零,则在对象 X 中设置值 Y。
其中 X 和 Y 是概念类型的BitmaskType
。
当使用 gcc 4.7 尝试以下简单的代码片段时,我收到模板推断错误:
#include <future>
int main() {
(std::launch::async & std::launch::async) != 0;
}
错误:
error: no match for 'operator!=' in '(std::launch)1 != 0'
... followed by tons of deduction errors
这是 gcc 中的错误还是我只是在这里弄错了什么?如果是,执行此类检查的正确方法是什么?
我已经检查了 gcc 错误列表,但找不到涵盖此主题的任何内容。
enum
类的成员不应隐式转换为int
,反之亦然。可以确保将位掩码类型转换为 int
,也可以使用 enum
类的零值。我认为后者更可取:
(std::launch::async & std::launch::async) != std::launch()
(我还在按位and
操作周围添加了括号,因为它的优先级高于比较,并且按位and
具有位掩码类型的布尔值并没有多大意义)。
最简单的方法是 7.2 [enum.dcl] 第 9 段:
。请注意,此隐式枚举到 int 的转换不是为作用域枚举提供的:...
然而,这是一个非规范的例子。跟踪标准中作用域规则的规则可能需要排除所有允许转换的情况,并且目前不太喜欢此练习。
相关文章:
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 比较C++变量的最有效方法
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- 比较"A"、"C"、"G"'T'字符的最快方法
- 任何方法都可以在C++中比较数据结构中的许多方法
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- 在 c++ 中比较不相等数组或字符串的方法
- 使用 lambda 比较初始化优先级队列的方法
- C# 通用比较方法 [C++模板的类似物]
- 比较字符* (C/C++) 的最快方法?
- 获取字符串大小的各种方法之间的比较
- C 是否具有对两个STD :: sets,vectors等进行三角比较的标准方法
- 比较两个文件中的两个中间人的最佳方法.C++
- 两种数字比较方法中哪一种更有效
- C++标准::地图比较方法
- 为什么比较方法不起作用?
- 对于C++字符串最好使用比较方法或关系运算符
- 类中的比较方法