我正在将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.
答案 0 :(得分:4)
假设s
是std::string
,则std::string::size()
方法将返回std::string::size_type
(这是一种无符号数据类型),并且通常返回unsigned long
( 4或8个字节,具体取决于平台)。
如果从包含0的unsigned int
中减去一个正值,则结果将换成非常大的正数(即UINT_MAX-10
)。顾名思义,无符号值始终为正。
因此,将0与这样的包装数进行比较将为真。
如果将包装的值分配给int
变量,则结果将为负(即-10
)。编译器执行自动整数转换。整数值可以为负。
这就是得出不同结果的原因。