怎么使用span解决数组退化和越界访问

技术怎么使用span解决数组退化和越界访问本篇文章给大家分享的是有关怎么使用span解决数组退化和越界访问,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。数组

本文讲述如何使用span解决阵列降级和跨界访问问题。边肖觉得很实用,所以分享给大家学习。希望你看完这篇文章能有所收获。让我们和边肖一起看看。

数组是C语言继承自C语言的一个特性。它易于使用,同时可以提供出色的性能,因此得到了广泛的应用。但是简单的另一面是风险,最大的两个问题是阵列退化和距离误差。如何提前利用C 20的新特性跨度,解决阵列降级和跨界访问的问题。

首先,看看使用数组的最常见代码:

int data[10];for(size _ ti=0;isizeof(数据)/sizeof(数据[0]);I){ data[I]=0;}

当定义一个数组时,同时存在关于元素数量的信息。这些信息可以用来操纵数组。但是,当数组作为参数传递给函数时,它只能作为指针传递,这就是数组退化。为了正确掌握阵列的大小,一般需要同时传输阵列的大小信息。例如,以下初始化函数是这样的:

voidinit_data(intbuffer[],size _ tsize){ cout ' size=' sizeendl;for(GSL : indexi=0;isizeI){ buffer[I]=I;}缓冲区[4]=40;缓冲区[20]=20;//跨境访问}

即使函数参数被正式声明为数组,所有行为也与指针完全相同。另一个问题是,因为数组是完全暴露的数据结构,所以没有保护。例如,在代码的第8行,即使访问的第20个元素已经超过了前10个元素,该操作也将正常通过。但接下来不知道哪一刻,这个操作的影响会以完全不相关的形式表现出来。数组大小信息、传递错误、越界操作的获取具有易入门、难排的特点,是很多程序员的噩梦。

为了解决这个问题,GSL引入了一个模板类span,它可以同时管理数组的地址和大小。从C 20开始,这个类将成为C的标准函数。

使用span类的初始化函数如下:

void init _ data(GSL :3360 spaintbuffer){ cout ' size=' buffer . size()} endl;int value=0;for(autoit=buffer . begin();它!=buffer . end();it){ * it=值;}缓冲区[4]=10;缓冲区[20]=20;//将触发断言}

只要将函数参数声明为gsl:spanint buffer,大小信息就由span template类管理,然后数组就可以像向量一样使用了。如果发生越界访问,将触发断言。

使用数组和span传递参数的示例代码如下:

int main(){ int data[10];for(size _ ti=0;isizeof(数据)/sizeof(数据[0]);I){ data[I]=0;}//使用数组传递参数init_data(data,5);//使用span传递参数init_data(数据);返回0;}

与用数组调用相比,它在增强功能(范围检查等)的同时简化了数组的使用。)!

以上就是如何用span解决阵列降级和跨界访问。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业信息渠道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/79844.html

(0)

相关推荐

  • 租用台湾云服务器有什么好处

    技术租用台湾云服务器有什么好处台湾云服务器采用虚拟化技术将高性能服务器集群分为多个虚拟服务器。这些虚拟服务器是私有的,因为用户不必与同一物理服务器上的其他方共享磁盘空间、CPU、内存。台湾云服务器租用对您网站的好处 租用

    礼包 2021年12月8日
  • Web中二次注入攻击原理的示例分析

    技术Web中二次注入攻击原理的示例分析这篇文章主要介绍Web中二次注入攻击原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!二次注入攻击二次注入攻击的测试地址:http://127.0.

    攻略 2021年11月7日
  • 阿里巴巴开源Sentinel限流方案搭建是怎样的

    技术阿里巴巴开源Sentinel限流方案搭建是怎样的阿里巴巴开源Sentinel限流方案搭建是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所

    攻略 2021年10月20日
  • 雅诗兰黛的眼霜,雅诗兰黛有什么好的眼霜

    技术雅诗兰黛的眼霜,雅诗兰黛有什么好的眼霜截止目前的话雅诗兰黛的眼霜,雅诗兰黛的眼霜我总共用过3款,这里讲一下我的使用感受。首先肤质声明:油痘肌肤,常年熬夜,眼下黑眼圈不严重,眼袋和水肿比较严重。1.雅诗兰黛抗蓝光眼霜

    生活 2021年10月30日
  • 如何将Tibco Ent .对于(同JavaMessageService)Java消息服务代替JBoss-3.0.1RC1_Tomcat-4.0.4中的JBossMQ

    技术如何将Tibco Ent. for JMS代替JBoss-3.0.1RC1_Tomcat-4.0.4中的JBossMQ小编给大家分享一下如何将Tibco Ent. for JMS代替JBoss-3.0.1RC1_To

    攻略 2021年12月24日
  • 如何解决php curl不能访问

    技术如何解决php curl不能访问这篇文章主要介绍“如何解决php curl不能访问”,在日常操作中,相信很多人在如何解决php curl不能访问问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年10月25日