C ++字符串大小减去整数不是期望值,为什么?

时间:2018-10-05 13:13:59

标签: c++

int main () {
string s = "";
cout << s.size() << endl;
cout << s.size() - 5 << endl;
return 0;
}

上面的代码输出如下:

0
18446744073709551611

为什么第二个结果不是-5?

2 个答案:

答案 0 :(得分:3)

由于std::string::size()返回的类型为std::string::size_type的值是无符号整数类型(不,不能保证为unsigned int,请使用std::size_t({{1 }})。为了执行减法运算,两个操作数值都进行整数提升,通过积分提升将两个值提升为共同类型-在这种情况下为<cstddef>,然后执行减法运算。

Integral Promotions

答案 1 :(得分:1)

std::string::size返回 unsigned 整数类型。无符号类型的下溢定义明确,并导致结果从该类型可以表示的最大值开始回绕。