【问题标题】:C++ string size minus integer is not the expected value, why? [duplicate]C++ 字符串大小减去整数不是预期值,为什么? [复制]
【发布时间】:2018-10-05 13:13:59
【问题描述】:
int main () {
string s = "";
cout << s.size() << endl;
cout << s.size() - 5 << endl;
return 0;
}

以上代码输出如下:

0
18446744073709551611

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

【问题讨论】:

标签: c++


【解决方案1】:

因为std::string::size() 返回一个std::string::size_type 类型的值,它是一个无符号整数类型(不,这不能保证是unsigned int,请使用std::size_t (&lt;cstddef&gt;))。为了执行减法,两个操作数的值都经过整数提升,两个值都被提升为一个公共类型——在本例中为std::string::size_type,然后执行减法。

Integral Promotions

【讨论】:

  • 那么在这个问题中,s.size() - 5s.size() 被提升为 int 类型?为什么不是0,而是一个很大的数值。
【解决方案2】:

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

【讨论】:

  • unsigned - int 也是unsigned
猜你喜欢
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多