【发布时间】:2018-04-21 00:34:39
【问题描述】:
在 GCC 7.2(但不是 4.4.7!)中编译时,会生成以下代码 “布尔上下文中的枚举常量”(-Wint-in-bool-context)警告。如果我这样做,警告就会消失:
- 我删除了另一个重载 (
void func(bool)) - 我删除了枚举中的
FOOBAZ组合,并在函数调用 (flagTest.func(Test::FOO | Test::BAZ)) 中执行按位或运算。
我的问题是:
- 为什么这些更改中的任何一个都删除了警告。和/或为什么首先触发它?
- 除上述之外,我还可以进行任何简单的更改来修复警告吗?
在我真正的问题的上下文中,我无法删除重载,并且多次使用FOOBAZ 等效项(类似于Qt::AlignCenter)。我已经进行了很多搜索,但如果我在 SO 或其他地方找到了任何内容,那么它的相关性已经超出了我的范围。
#include <QFlags>
class Test
{
public:
enum SimpleFlag
{
FOO = 1 << 0,
BAR = 1 << 1,
BAZ = 1 << 2,
FOOBAZ = (FOO | BAZ)
};
Q_DECLARE_FLAGS(MyFlags, SimpleFlag)
Test(){}
void func(bool) { }
void func(Test::MyFlags) { }
};
Q_DECLARE_OPERATORS_FOR_FLAGS(Test::MyFlags)
int main(int argc, char *argv[])
{
Q_UNUSED(argc); Q_UNUSED(argv);
Test flagTest;
flagTest.func(Test::FOOBAZ);
}
【问题讨论】:
-
因为
Test::MyFlags不是SimpleFlag,这就是原因。摆脱所有的 Q-goo,只使用枚举,并且代码按预期编译,没有任何警告。
标签: c++ qt gcc enums overloading