是比较短期还是长期隐式转换?

时间:2017-10-03 15:47:12

标签: c++ visual-c++

根据我的理解,比较两种不同类型,包括shortlong仍会导致转化。我 相信 short将被提升为int。但是,我似乎找不到将shortlong进行比较的直接答案。

例如:

Uint32Uint8进行比较是不合适的。

Uint32添加Uint8是否不合适?

Uint32 / Uint8分别是uint32_tuint8_t的SDL中的速记类型定义。

编辑: 我想我应该对我的整体问题更加明确一点。我真的想知道是否比较或评估两种不同类型的int s,它们是相同的标志(在示例中为unsigned),但在 SIZE <中有所不同/ strong>(uint8_tuint32_t),是不合适的事情。

由于隐式转换,可能是不正确的。由于转换以外的性能问题,可能是不正确的。也许是因为某些我不知道的可读性问题而感到不满。

在评论中,我们将两个相似的问题相关联,但他们正在将intlong进行比较。我认为它非常相似,但int只是采用任何需要的版本(uint8_tsint16_t等)的形式?

1 个答案:

答案 0 :(得分:1)

我相信这个问题的回答是:http://en.cppreference.com/w/cpp/language/operator_arithmetic在“Conversions&#39;”的小节下。

  

否则,操作数具有整数类型(因为此时提升了bool,char,char16_t,char32_t,wchar_t和unscoped枚举)并且应用了积分转换以生成公共类型,如下所示:

     

如果两个操作数都是有符号的,或者两者都是无符号的,那么具有较小转换等级的操作数将转换为具有较大整数转换等级的操作数

所以我的问题的总体答案是,是的,有转换。从我所知道的,比较两个unsigned int类型没有问题,只要您不与signedunsigned进行比较。