我正在为入口循环设置一个 bool 表达式;但 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.
最佳答案
假设 s
是一个 std::string
,std::string::size()
方法返回一个 std::string::size_type
,这是一种无符号数据类型,通常是 unsigned long
(4 或 8 字节,取决于平台)。
如果您从包含 0 的 unsigned int
中减去一个正值,则结果将换行为一个非常大的正数(即 UINT_MAX-10
)。顾名思义,无符号值始终为正。
因此,0 compared < 与这样一个包装数字将为真。
如果您将该包装值分配给 int
变量,结果将为负数(即 -10
)。编译器会自动进行整数转换。整数值可以是负数。
这就是不同结果的原因。
关于c++ - 为什么 0 < string.size() - N 为真,而 string.size() = 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440383/