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

标签 c++ string

我正在为入口循环设置一个 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::stringstd::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/

相关文章:

c++ - 在 C++ 中读取文件

具有相同 if 语句的 C++ 内联方法

python - Python 将字符串转换为整数

java - 如何防止 java.lang.String.split() 创建前导空字符串?

c++ - Dev-C++ - [构建错误] [main.o] 错误 1

c++ - 如何使用 clang 和选项 -std=c++11 编译项目,使用 autotools

c++ - c++中字符串的格式化输入

java - 在 Java 中将行转换为不同的数组

string - 如何将uint64转换为字符串

excel - 如何选择一定数量的带有文本的随机excel单元格并将它们组合成一个字符串