您的位置:首页 > 健康 > 养生 > 东莞常平限电通知2021_网络服务协议模板_网络推广员上班靠谱吗_太原互联网推广公司

东莞常平限电通知2021_网络服务协议模板_网络推广员上班靠谱吗_太原互联网推广公司

2025/4/20 23:05:47 来源:https://blog.csdn.net/L_142190687/article/details/147168908  浏览:    关键词:东莞常平限电通知2021_网络服务协议模板_网络推广员上班靠谱吗_太原互联网推广公司
东莞常平限电通知2021_网络服务协议模板_网络推广员上班靠谱吗_太原互联网推广公司

C++的容器中提供了array即数组,但是我们一般很少用,而是一般用自己创建的静态数组如int arr[10],那么这两者有什么区别呢.

以下代码均在VS2022Debug版本下运行

array与静态数组的最主要的区别就是边界检查和安全性的问题

首先来看静态数组:

#include <iostream>
using namespace std;int main()
{int arr1[10] = {0};arr[10] = 10;return 0;
}

那么我们发现尝试越界写的时候报错了。

我们来看另一个情况,

#incldue <iostream>
using namespace std;int main()
{int arr1[10] = {0};arr1[12] = 12;return 0;
}

但是在运行后此时又发现没有问题

这说明编译器对这个arr1的越界写检查是一种抽查 并不一定是越界写就会报错。这会带来一些安全问题。

同时我们要注意的是,编译器对于这种静态数组没有进行越界读的检查,也就是当我们cout << arr1[10]时,

我们发现随机输出了一个值,并没有报错。

结论:对于静态数组,编译器只进行越界写检查且是抽查,而不进行越界读检查。

而对于array

#include <iostream>
using namespace std;
#include <array>
int main()
{    array<int,10> arr2;arr2[10] = 10;cout << arr2[10] << endl;return 0;   
}

当我们进行越界读和越界写时都会进行报错

因此,array对越界写和越界读机制检测更为严谨。

结论:array对越界读和越界写有着严格的检查。

同时二者还有一些其他的区别,如array是模版类,提供了一些更便捷的方法,以及array可以直接赋值,而静态数组不能直接进行赋值操作等。

当然我们这里主要讲的是越界检查和安全性的问题。

在实际中,我们可以根据不同需要使用不同的形式实现数组。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com