return 有符号类型函数的 return 语句中无符号值的减法

Subtraction of unsigned values in return statement of a function that return signed type

我已经 运行 编写了简化后的代码

__int64 fun(unsigned __int64 x, unsigned __int64 y)
{
    return x - y;
}

在 Visual Studio 中,即使 y>x 并且我们有适当的负值,它也能正常工作。但这是 UB 还是有效情况,所有其他编译器也能正确处理吗?

从来都不是UB。在最新的 C++ 标准中,它总是定义明确的:

the result is the unique value of the destination type that is congruent to the source integer modulo 2N, where N is the width of the destination type.

在以前的一些标准中,它可能是实现定义的:

If the destination type is signed, the value is unchanged if it can be represented in the destination type (and bit-field width); otherwise, the value is implementation-defined.

然而,在实践中,每个实施都会对 2N 取模。