为什么在C++中混合size_t和unsignedint时模除法会出错

给定一个程序

#include <iostream>
using namespace std;

int main()
{
     const size_t DoW = 7;
     const unsigned int DAYS_OF_WEEK = static_cast<unsigned int> (DoW);
     unsigned int dayOfFirstDay = 0;
     unsigned int _firstDayOfWeek = 1;
     unsigned int diff = (DAYS_OF_WEEK+ (dayOfFirstDay - _firstDayOfWeek) ) % DAYS_OF_WEEK;
     cout << "diff = ("  << DAYS_OF_WEEK << " + (" << dayOfFirstDay << " - " << _firstDayOfWeek << ")) %" << DAYS_OF_WEEK
         << " = " << diff << endl;
     return 0;
}

该程序的输出是

diff = (7 + (0 - 1)) %7 = 6
diff = (7 + (0 - 1)) %7 = 6

这是预期的。但是修改后的程序没有static_cast

产出

diff = (7 + (0 - 1)) %7 = 3

这是意料之中的。为什么?

(两个程序都是g++在 64 位 Ubuntu 上用9.3.0编译的)

以上是为什么在C++中混合size_t和unsignedint时模除法会出错的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>