繁体   English   中英

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

[英]C++: Setting a uint32 to an int32 (negative value)

我正在辩论是否可以摆脱编译器警告。 警告来自将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吗?

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

一个笨拙但也许更清晰的方法是写

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

如果它在您的图书馆中,我将使用std::optionalboost::optional

该代码根据标准是有效的,赋值和相等性检查均在其操作数上应用整数转换。 但是,使用哨兵值是C-ism,我将使用异常代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM