C ++:将uint32设置为int32(负值)

时间:2018-03-23 15:44:37

标签: c++ error-handling compiler-warnings uint32 int32

我在辩论是否可以摆脱编译器警告。警告来自将uint32与-1进行比较。

现在只是瞥一眼它,这似乎是一件不明智的事情,因为uint32永远不应该是否定的但是我没有编写这段代码并且不熟悉c ++的做事方式,所以我问你。下面是一些示例代码来说明正在发生的事情。

  bool isMyAddressValid = false;
  unsigned int myAddress(-1);
  unsigned int translatedAddress;

  if(isMyAddressValid)
  {
      translatedAddress = 500;
  }
  else
  {
      translatedAddress = -1;
  }

  myAddress = translatedAddress;

  if(myAddress == -1)
  {
      std::cout << "ERROR OCCURED";
  }
  else
  {
      std::cout << "SUCCESS";
  }`

这是有效的代码吗?这是否是我不理解的Cism?

3 个答案:

答案 0 :(得分:1)

unsigned类型设置为-1是将其设置为最大可能值的惯用方法,无论该类型中的位数如何。

笨拙但也许更清晰的方式是写

translatedAddresss = std::numeric_limits<decltype(translatedAddresss)>::max();

答案 1 :(得分:0)

如果它存在于您的库中,我会使用std::optionalboost::optional

答案 2 :(得分:0)

代码根据标准有效,赋值和等式检查在其操作数上应用整数转换。但是,使用标记值的是C-ism,我会使用异常。