int main () {
string s = "";
cout << s.size() << endl;
cout << s.size() - 5 << endl;
return 0;
}
上面的代码输出如下:
0
18446744073709551611
为什么第二个结果不是-5?
答案 0 :(得分:3)
由于std::string::size()
返回的类型为std::string::size_type
的值是无符号整数类型(不,不能保证为unsigned int
,请使用std::size_t
({{1 }})。为了执行减法运算,两个操作数值都进行整数提升,通过积分提升将两个值提升为共同类型-在这种情况下为<cstddef>
,然后执行减法运算。
答案 1 :(得分:1)
std::string::size
返回 unsigned 整数类型。无符号类型的下溢定义明确,并导致结果从该类型可以表示的最大值开始回绕。