C++ 从整数到枚举QEvent::Type的首选强制转换样式
我正在从文档中查看此Qt的示例: 我不理解这里是否需要显式强制转换,即C++ 从整数到枚举QEvent::Type的首选强制转换样式,c++,qt,casting,C++,Qt,Casting,我正在从文档中查看此Qt的示例: 我不理解这里是否需要显式强制转换,即enum Event::Type的整数值,因为以下方法也适用: e->type() != QEvent::User+1 // no explicit cast 那么,使用显式强制转换更好吗?为什么 谢谢。上的在线文档 虽然可以使用static\u cast获取枚举数的数值,但没有从作用域枚举数的值到整数类型的隐式转换 所以,是的,对于这种转换,您需要显式强制转换 但即使QEvent::Type不是作用域枚举并允
enum Event::Type
的整数值,因为以下方法也适用:
e->type() != QEvent::User+1 // no explicit cast
那么,使用显式强制转换更好吗?为什么
谢谢。上的在线文档 虽然可以使用
static\u cast
获取枚举数的数值,但没有从作用域枚举数的值到整数类型的隐式转换
所以,是的,对于这种转换,您需要显式强制转换
但即使QEvent::Type
不是作用域枚举并允许隐式转换,static_cast
也是一种很好的方法
请阅读此常见问题解答:QEvent::User+1的类型是
int
。当然,将结果转换为QEvent::Type
会将其转换为QEvent::Type
,我猜这是它的原始类型,也是e->Type()的类型
你说得对,演员阵容是不需要的,尽管原因不那么直接。在e->Type()==QEvent::User+1
中,右侧有Typeint
,因此左侧提升为int
,并对int
值进行比较。通常,这是完全可以的;这就是自古以来使用枚举的方式。在我看来,这一角色似乎将形式主义凌驾于现实之上。有些人喜欢这样做。在C++中,STATICE-CAST是首选的方法,即使它是隐式的转换。请看这个我编辑了这个问题来澄清它:实际上我是在问我是否需要显式强制转换。但是QEvent::Type不是一个作用域枚举,它也在没有显式强制转换的情况下工作。我不熟悉Qt,我假设它是一个作用域枚举,因为:
。好的,但是e->Type()
已经返回了一个QEvent::Type
枚举值,并且我们正在将其与枚举的有效值进行比较。是否是相同类型的QEvent::Type
、QEvent::User
和e->Type()
yes,而QEvent::User
是在QEvent
类中定义的QEvent::Type
枚举的可能值之一
e->type() != QEvent::Type(QEvent::User+1)
e->type() != QEvent::User+1 // no explicit cast