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

时间:2019-08-10 07:53:10

标签: c++ string

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

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.

1 个答案:

答案 0 :(得分:4)

假设sstd::string,则std::string::size()方法将返回std::string::size_type(这是一种无符号数据类型),并且通常返回unsigned long( 4或8个字节,具体取决于平台)。

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

因此,将0与这样的包装数进行比较将为真。

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

这就是得出不同结果的原因。