我正在从文档http://doc.qt.io/qt-5/statemachine-api.html看这个Qt的示例:
bool eventTest(QEvent *e) override
{
if (e->type() != QEvent::Type(QEvent::User+1)) // StringEvent
return false;
StringEvent *se = static_cast<StringEvent*>(e);
return (m_value == se->value);
}
但在行中:
e->type() != QEvent::Type(QEvent::User+1)
我不明白这里是否需要显式强制转换,即
enum Event::Type
的整数值,因为以下内容也适用:e->type() != QEvent::User+1 // no explicit cast
那么使用显式强制转换更好吗?为什么?
谢谢。
最佳答案
QEvent::User + 1
的类型是int
。当然,将结果转换为QEvent::Type
会将其转换为QEvent::Type
,我猜那是它的原始类型以及e->Type()
的类型。
您是对的,尽管原因不那么直接,但是不需要强制转换。在e->Type() == QEvent::User + 1
中,右侧的类型为int
,因此左侧被提升为int
,并且在int
值上进行比较。通常,这完全可以。自远古以来就是这样使用enums
的方式。在我看来,这种投射就像将形式主义推向现实。有些人喜欢这样做。
关于c++ - 从整数到枚举的首选转换样式QEvent::Type,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54179415/