离谱错误求解答

题目总版

wzyc @ 2024-09-18 18:42:13

下方代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    vector <int> v;
    cout<<v.size()-1;
}

由于v.size()应该=0,那么代码应该输出-1 可实际上输出18446744073709551615


by Besheep @ 2024-09-18 18:43:02

这是动态数组啊


by wzyc @ 2024-09-18 18:43:38

我不知道发哪

就发总版上了


by littlep001 @ 2024-09-18 18:44:24

在你的代码中,v.size() 返回的是 0,因此 v.size() - 1 计算结果是 -1。但是,size() 返回的是 size_t 类型,减去 1 会导致无符号整数下溢,从而输出一个很大的无符号整数(18446744073709551615)。要得到负数,可以将结果转换为 int 类型,如下所示:

cout << static_cast<int>(v.size()) - 1;

这样,代码就会正确输出 -1。


by littlep001 @ 2024-09-18 18:47:23

@wzyc


by wzyc @ 2024-09-18 18:49:12

@littlep001 啊。。。。对本蒟蒻来说有点难懂


by wzyc @ 2024-09-18 18:49:38

@littlep001 不过还是谢谢


by ikunTLE @ 2024-09-18 18:51:39

@wzyc 要输出 -1 改成这样:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    vector <int> v;
    cout<<int(v.size())-1;
}

by JeremyXie @ 2024-09-18 18:52:14

v.size()没有考虑他小于0的情况,所以用的是unsigned long long,但你需要有符号整数,所以要加强制类型转换(话说你应该发现这是MIN_unsigned long long而思考是否溢出的吧)


|