我以前见过这种问题,但提供的答案并没有让我明白一切。发布此问题时,通常会附上下一个示例:
#include <iostream>
int main()
{
unsigned int u = 10;
int i = -42;
std::cout << i + i << std::endl;
std::cout << i + u << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
-84
4294967264
Run Code Online (Sandbox Code Playgroud)
所有按预期工作 int 转换为无符号。但是,如果 的绝对值i小于 ,u则似乎没有发生这种转换。
#include <iostream>
int main()
{
unsigned int u = 10;
int i = -3;
std::cout << i + i << std::endl;
std::cout << i + u << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
-6
7
Run Code Online (Sandbox Code Playgroud)
我没有看到任何提到它的答案,也找不到任何解释。尽管这似乎是合乎逻辑的事情发生,但我对此没有任何解释。