我花了一些时间在这个网站上搜索,特别是这个问题:((a + (b & 255)) & 255)是否等同于((a + b) & 255)?
通过这样做,我得出结论:
int main()
{
unsigned short i = std::numeric_limits<unsigned short>::max();
unsigned short j = i;
auto y = i * j;
}
由于将i
和j
提升为int
类型而导致的乘法溢出可能会导致未定义的行为!也许i
和j
甚至不需要那么大。
我的结论是,例如,在一个unsigned short
为16位且int
为32位的系统上,行为可能是未定义的。
我这里说得对吗?
i
和j
适合于prvalue
,就像@krzaq引用的那样。 - apple apple