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

C++ C++;:将uint32设置为int32(负值),c++,error-handling,compiler-warnings,uint32,int32,C++,Error Handling,Compiler Warnings,Uint32,Int32,我正在争论是否可以消除编译器警告。该警告来自将uint32与-1进行比较 现在从浏览它看来这是一个不明智的事情,因为UIT32不应该是否定的,但是我没有写这个代码,我不熟悉C++的做事方式,所以我问你。下面是一些示例代码来说明发生了什么 bool isMyAddressValid = false; unsigned int myAddress(-1); unsigned int translatedAddress; if(isMyAddressValid) {

我正在争论是否可以消除编译器警告。该警告来自将uint32与-1进行比较

现在从浏览它看来这是一个不明智的事情,因为UIT32不应该是否定的,但是我没有写这个代码,我不熟悉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";
  }`
bool isMyAddressValid=false;
无符号整数myAddress(-1);
无符号整数翻译地址;
如果(isMyAddressValid)
{
translatedAddress=500;
}
其他的
{
translatedAddress=-1;
}
myAddress=translatedAddress;
如果(我的地址==-1)
{

std::cout将
无符号
类型设置为-1是将其设置为最大可能值的惯用方法,而不考虑类型中的位数

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

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

如果它在您的库库中,我会使用或

根据标准,代码是有效的,赋值和相等检查都对其操作数应用整数转换。然而,使用前哨值是一种C-ism,我会使用异常。

或使用UINT_MAX。@NeilButterworth:但这包含了类型.
-1
适用于任何无符号类型。代码是否会进入if(myAddress=-1)块?@TeeseCaprice:绝对!-1和您的类型的“最大值”是一样的。