【发布时间】:2019-06-04 02:06:29
【问题描述】:
我们现在正在使用 Ubuntu 18 中可用的较新 gcc 7.3 在 QtCreator 下测试编译一些 Qt 代码(我们之前在 Ubuntu 16 下使用 gcc 4.9.3)。
Qt 提供了一个enum 因此:
enum CheckState {
Unchecked,
PartiallyChecked,
Checked
};
现在,当我们使用三元运算符时:
QVariant MyClass::MyFunc(const QModelIndex &index, int role) const {
return (someCondition ? Qt::Checked : Qt::Unchecked);
}
然后gcc 抱怨(带有警告,但我们将警告视为错误):
prog.cpp:999:99:
error: passing ‘Qt::CheckState’ chooses ‘int’
over ‘uint {aka unsigned int}’ [-Werror=sign-promo]
我们可以解决这个问题:
return (someCondition ? Qt::Checked : static_cast<int>(Qt::Unchecked));
但我不确定为什么需要这样做。
既然这些来自完全相同的enum,它们应该是相同的类型,不是吗?我知道两个可能的值是不同类型的潜在问题,但我不明白为什么在这种情况下需要进行这种类型转换。
这些值是来自enum 的{0, 1, 2},我认为完全相同类型否定了任何转换的可能性。
我能想到的唯一可能性是枚举的零值由于某种原因被视为无符号。
【问题讨论】: