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::optional or boost::optional

该代码符合标准,赋值和相等性检查均对其操作数应用整数转换。但是,使用标记值是 C-ism,我会改用异常。