有c ++代码:
string s = "abc";
size_t len = s.length();
cout<<(-1%len)<<endl;//print 0
Run Code Online (Sandbox Code Playgroud)
但如果将size_t更改为int:
string s = "abc";
int len = s.length();
cout<<(-1%len)<<endl;//print -1
Run Code Online (Sandbox Code Playgroud)
为什么会这样,有人可以解释一下,谢谢!
底线是你的第一个代码片段,归结为-1 % size_t{3}并转换-1为类型size_t,如果是32位程序则产生FFFF FFFF,如果是64位则产生FFFF FFFF FFFF FFFF.要么是3的倍数,那么mod运算符返回0.在另一种情况下,有两个(签名)int值-1 % 3返回-1,正如您希望的那样.