【发布时间】:2020-05-26 18:21:50
【问题描述】:
const int IX(int x, int y, std::size_t width)
{
if ((width * y + x) > 0)
{
return width * y + x;
}
else
{
return 0;
}
}
const int IX(int x, int y, std::size_t width)
{
int value = width * y + x;
if (value > 0)
{
return value;
}
else
{
return 0;
}
}
在这里,如果x=0 和y=-1 独立于width,第一个函数返回第一个分支(为什么?),第二个返回预期的。这是编译器错误,还是我遗漏了什么?
我正在使用 Visual Studio 2019 编译器。
【问题讨论】:
-
混合无符号和有符号的危险
-
@bolov 所以在实践中 unsigned * signed 如果不强制转换是未签名的?为什么?
标签: c++ if-statement conditional-statements