我正在为进入循环设置一个布尔表达式;但是布尔表达式返回了一个错误的答案?
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::string
,std::string::size()
方法返回一个std::string::size_type
,这是一个无符号的数据类型,通常是一个unsigned long
(4或8个字节,取决于平台(。
如果从包含 0 的unsigned int
中减去一个正值,则结果将包装为一个非常大的正数(即UINT_MAX-10
(。顾名思义,无符号值始终为正值。
因此,将
如果将该包装值分配给int
变量,则结果将是负数(即-10
(。编译器执行自动整数转换。整数值可以为负数。
这就是不同结果的原因。