首先,可以思考一个问题:
如果有一个容量为5的数组,我们却调用它的第六个元素,会产生什么结果呢?
我在微信群里跟几个同学讨论,然后看到了很多不同的声音。
首先,需要明确使用的编程语言,因为不同的编译器确实可以造成不同的结果。就我熟悉的C语言和C++来说,就有着一定的差异。
对于C语言,数组变量保存在一个专门开辟出来的栈当中,因此,如果是小范围的越界调用,并不会造成灾难性的后果,比如以下程序。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a[]={ 0,1,2,3,4 };
printf("%d\n", a[5]);
getchar();
return 0;
}
对于小范围的调用,都可以随机产生一个int型变量。但直接调用a[1000]这么大的范围,程序就会报错。
另一方面,对于C++语言的vector容器,任何小小的超出范围,程序都会报错。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> a{ 0,1,2,3,4 };
cout << a[5] << endl;
getchar();
return 0;
}
从这个角度来看,C++的STL库还是有着自己的优势,vector这种严格打造的数据容器,可以有效防止越界调用的发生。
虽然在一些文章上看到说很多公司做C++的都不喜欢用STL库,但我觉得,存在就是有道理的,它确实防止了我这种初学者犯一些低级错误,减少了bug发生的可能性。对于我这种非专业程序员,我用着舒服方便是最重要的,效率某些情况下并不是我最考虑的因素,所以我还是打算继续把STL用下去。
用着方便,它不香吗?