怎么使用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)

相关推荐

  • Java编程中最容易忽略的10个常见问题分别有哪些

    技术Java编程中最容易忽略的10个常见问题分别有哪些本篇文章给大家分享的是有关Java编程中最容易忽略的10个常见问题分别有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟

    攻略 2021年10月29日
  • 坐便器品牌排行,孕妇坐便器的品牌有哪些呢

    技术坐便器品牌排行,孕妇坐便器的品牌有哪些呢1坐便器品牌排行、TOTO(东陶旗下,于1917年日本,十大座便器品牌,厨卫百强企业,东陶(中国)有限公司)2、箭牌-法恩莎(乐华陶瓷旗下,中国名牌,一线牌子,坐便器十大品牌,

    生活 2021年10月23日
  • java的runtime执行命令的缺点(javaruntime参数设置)

    技术Java Runtime的使用方法是什么这篇文章将为大家详细讲解有关Java Runtime的使用方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言最近做项

    攻略 2021年12月15日
  • Dojo Build有什么用

    技术Dojo Build有什么用小编给大家分享一下Dojo Build有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Dojo 提供了一

    攻略 2021年10月19日
  • 2013网游排行榜前十名,网游烧钱排行榜该怎么排

    技术2013网游排行榜前十名,网游烧钱排行榜该怎么排网游烧钱排行可以分成三档,单人投入无上限级;千万土豪级和百万富翁级2013网游排行榜前十名。单人投入无上限级:这种级别的网游有三款,在热度和规模始终确保国内畅销前列的同

    生活 2021年10月28日
  • DG主库忘记force logging情况下insert append了nologgin表操作是怎样的

    技术DG主库忘记force logging情况下insert append了nologgin表操作是怎样的这篇文章给大家介绍DG主库忘记force logging情况下insert append了nologgin表操作是

    攻略 2021年11月30日