我正在从文档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/

10-11 01:03
查看更多