gpt4 book ai didi

c++ - 为什么在这种情况下 cout 不会溢出?

转载 作者:行者123 更新时间:2023-12-04 12:17:52 26 4
gpt4 key购买 nike

我的 ubuntu20.04 上运行了以下代码补丁,由 gcc-9 编译。

#include <iostream>

int main()
{
uint16_t a = 0xFFFF;
uint16_t b = 1;

uint16_t ret = a + b;
std::cout << a + b << std::endl;
std::cout << ret << std::endl;
}

我期望两个结果都溢出了,但是运行结果显示只有第二个溢出,第一个可以得到正确的结果。
是什么让他们的行为不同。 +的正确值操作也应该是 uint16_t ,那么为什么第一个 cout能得到正确的结果吗?
P.S.,当我从 uint16_t 更改类型时至 uint32_t ,两个都溢出了。

最佳答案

当您这样做时a + b操作数将接受 arithmetic conversions这将 promote int 的值类型。
所以a + b真的很像 static_cast<int>(a) + static_cast<int>(b)结果当然是 int .
促销仅适用于小于 int 的类型(所以 shortchar )。已经是 int 的值(或更大)将不会被提升。

关于c++ - 为什么在这种情况下 cout 不会溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69118947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com