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,我会改用异常。
我正在考虑是否可以消除编译器警告。警告来自将 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,我会改用异常。