考虑以下程序:
// http://ideone.com/4I0dT
#include <limits>
#include <iostream>
int main()
{
int max = std::numeric_limits<int>::max();
unsigned int one = 1;
unsigned int result = max + one;
std::cout << result;
}
和
// http://ideone.com/UBuFZ
#include <limits>
#include <iostream>
int main()
{
unsigned int us = 42;
int neg = -43;
int result = us + neg;
std::cout << result;
}
+ 运算符如何“知道”要返回的正确类型?int
一般规则是将所有参数转换为最宽的类型,但这里在and之间没有明确的“赢家” unsigned int
。在第一种情况下,unsigned int
必须被选为 的结果operator+
,因为我得到了 的结果2147483648
。在第二种情况下,它必须选择int
,因为我得到的结果是-1
。然而,在一般情况下,我看不出这是如何确定的。这是我看到的未定义行为还是其他?