【问题标题】:Is comparing a short to a long an implicit conversion?将短期与长期进行比较是一种隐式转换吗?
【发布时间】:2017-10-04 01:44:50
【问题描述】:

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

例如:

Uint32Uint8 进行比较是否不当。

Uint8 中添加Uint32 是否不当?

Uint32/Uint8 是 SDL 中 uint32_tuint8_t 的简写类型定义。

编辑: 我想我应该对我的整体问题更明确一点。我真的想知道是否比较或评估两种不同类型的ints,它们是相同的标志(在示例中为unsigned),但在SIZEuint8_tuint32_t),是不恰当的做法。

可能由于隐式转换而不合适。由于转换以外的性能问题,它可能不合适。也许因为我不知道的某种可读性问题,它不被接受。

在 cmets 中,两个类似的问题被关联,但是他们将 intlong 进行比较。我认为这非常相似,但int 不只是采用所需版本的形式(uint8_tsint16_t 等)吗?

【问题讨论】:

标签: c++ visual-c++


【解决方案1】:

我相信这个问题的答案是:http://en.cppreference.com/w/cpp/language/operator_arithmetic 在“转化”小节下。

否则,操作数为整数类型(因为此时提升了 bool、char、char16_t、char32_t、wchar_t 和无作用域枚举)并应用整数转换来生成通用类型,如下所示:

如果两个操作数都带符号或都无符号,则转换等级较小的操作数将转换为整数转换等级较大的操作数

所以我的问题的总体答案是,是的,有一个转换。据我所知,比较两个 unsigned int 类型没有问题,只要因为你没有比较 signedunsigned

【讨论】:

  • 那是 C,而不是 C++,因此不能(就其本身)被视为您问题的答案。
  • 谢谢@NirFriedman 我会相应地更新答案。但是,据我所知,除非其他人发布答案,否则我无法在两天内关闭此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多