为什么 0 < string.size() - N 为真,而 string.size() = 0
why 0 < string.size() - N is true, while string.size() = 0
我正在为进入循环设置一个布尔表达式;但是布尔表达式返回了一个错误的答案?
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
(。编译器执行自动整数转换。整数值可以为负数。
这就是不同结果的原因。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- std::string.size() 未知行为
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- 与 string.size() 比较时 int 的符号性显示警告
- 为什么 0 < string.size() - N 为真,而 string.size() = 0
- 在 c++ 中,std::string::size() 不计算修改后的字符串长度
- 为什么 --string::end() 可以编译,而 --string.size() 不能编译?
- String.length() 或 String.size() 返回带有 "x" (\x5) 的数字
- C++ std::string length() 或 size() 不适用于方法参数
- 除了string.size之外,该如何
- std::string的size()和length()有什么不同吗
- 获取指向成员std::string::size的指针无法与libc++链接,但可以与libstdc++一起使用
- std::string 实现是否符合其中 's.c_str() + s.size()' 不一定与 '&s[s.size()]' 相同?
- std::string::size() 是如何实现的
- 哪个更快,string.empty()还是string.size()==0
- c++中string.size()的类型是什么?
- Std::string::size()奇怪的行为
- 在使用string.size()时获得无限循环
- 字符串回文在String.size()上给出错误答案,但在String.seize()-1上给出正确答案
- std::string::length() vs. std::string::size()