gpt4 book ai didi

c++ - 为什么 `( i < (str.size()-(3-vec.size())) )` 是真的?

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:59 24 4
gpt4 key购买 nike

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
string str("0");
vector<int> vec;
int upper_bound = str.size()-(3-vec.size());
int i = 0;

if ( i < upper_bound ) // Line 1
cout << "i < upper_bound - 1\n";
else
cout << "pass\n";

if ( i < (str.size()-(3-vec.size())) ) // Line 2
cout << "i < upper_bound - 2\n";
else
cout << "pass\n";

return 0;
}

输出如下:

pass
i < upper_bound

问题>为什么第1行和第2行打印的结果不同?

最佳答案

在数学上,str.size()-(3-vec.size())1-(3-0),也就是 -2。但是,由于这些是无符号值,因此结果也是无符号的,因此具有很大的正值。

将其转换为 int 以初始化 upper_bound 技术上会给出未定义的行为,但实际上会给你 -2;所以第一个测试通过了。

第二个测试与较大的无符号值而不是 -2 进行比较。

关于c++ - 为什么 `( i < (str.size()-(3-vec.size())) )` 是真的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21585913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com