我之前看到过这种问题的提问,但是给出的答案并没有完全解决我的问题。通常在发布这个问题时,会附带下面的示例:
#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;
}
输出:
-84
4294967264
当 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;
}
输出:
-6
7
我没看到任何提到它的答案,也找不到任何解释。虽然它似乎是一件符合逻辑的事情,但我还没有找到任何解释。
7
和无符号的7
? - 463035818_is_not_a_numberdecltype
和std::is_same_v
来验证表达式的类型。(或者使用一些技巧在文章中打印类型。) - chrisstd::cout
在屏幕上打印的7,而不是整数字面量7
。不用理会我,我一开始完全误解了问题,这就是问一些愚蠢问题的原因。 - 463035818_is_not_a_number