为什么 0 < string.size() - N 为真,而 string.size() = 0

  • 本文关键字:string size 为真 c++ string
  • 更新时间 :
  • 英文 :


我正在为进入循环设置一个布尔表达式;但是布尔表达式返回了一个错误的答案?

s = "";
bool flag_1 = (0 < (s.size() - 10));
int temp = s.size() - 10;
bool flag_2 = 0 < temp; 
//flag_2 and flag_1 should be the same,but they are different.

假设s是一个std::stringstd::string::size()方法返回一个std::string::size_type,这是一个无符号的数据类型,通常是一个unsigned long(4或8个字节,取决于平台(。

如果从包含 0 的unsigned int中减去一个正值,则结果将包装为一个非常大的正数(即UINT_MAX-10(。顾名思义,无符号值始终为正值。

因此,将

如果将该包装值分配给int变量,则结果将是负数(即-10(。编译器执行自动整数转换。整数值可以为负数。

这就是不同结果的原因。

最新更新