C++ C++;:将uint32设置为int32(负值)
我正在争论是否可以消除编译器警告。该警告来自将uint32与-1进行比较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) {
现在从浏览它看来这是一个不明智的事情,因为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和您的类型的“最大值”是一样的。