首页 > 解决方案 > 从整数到枚举的首选转换样式 QEvent::Type

问题描述

我正在查看文档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    

那么使用显式强制转换更好吗?为什么?

谢谢你。

标签: c++qtcasting

解决方案


的类型QEvent::User + 1int。当然,将结果QEvent::Type转换为QEvent::Type,我猜那是它的原始类型,以及e->Type().

你是对的,不需要演员阵容,尽管原因不那么直接。在e->Type() == QEvent::User + 1中,右侧有 type int,所以左侧被提升为int并且对int值进行比较。通常,这完全没问题。enums自古以来就是这样使用的。在我看来,这种演员阵容就像将形式主义提升到现实之上。有些人喜欢这样做。


推荐阅读