在负整数和 std::size_t 之间使用模运算符时的奇怪行为

Weird behaviour when using the modulo operator between a negative int and std::size_t

这段代码片段:

#include <iostream>
#include <cstddef>

int main()
{
    int a{-4}; 
    std::size_t b{3};
    std::cout << a % b;

    return 0;
}

打印

0

而这段代码片段:

#include <iostream>

int main()
{
    int a{-4}; 
    int b{3};
    std::cout << a % b;

    return 0;
}

打印

-1

那么,为什么第一个代码片段 returns 0?为什么将 bstd::size_t 更改为 int 打印出正确的结果?

哦,这是因为 a 隐式转换为 std::size_t 因为 bstd::size_t,也就是 4294967292(在我的机器上),并且 4294967292 % 3 == 0