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

相关推荐

  • 租用美国服务器建站的5个注意点美国服务器

    技术租用美国服务器建站的5个注意点美国服务器虽然在租用美国服务器的时候,不同的网站需要的配置也不一样,但是无论有什么特殊需求,每个网站所有者都应该在美国服务器租用中坚持五件事。 1. 高水平的正常运行时间 对于以提供内容

    礼包 2021年10月20日
  • 线程池的创建方式有哪些

    技术线程池的创建方式有哪些这篇文章主要讲解了“线程池的创建方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“线程池的创建方式有哪些”吧!什么是线程池?线程池(Thr

    攻略 2021年10月21日
  • 乐观锁和悲观锁

    技术乐观锁和悲观锁 乐观锁和悲观锁悲观锁:具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度。因此,在整个数据处理过程中,将数据处于锁定

    礼包 2021年12月15日
  • ios中tableview的优化(ios tableview置顶功能)

    技术iOS中tableView的分类有哪些这篇文章主要介绍iOS中tableView的分类有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!大致分了一下,一个uitableview需要几个方法去

    攻略 2021年12月24日
  • C++三只小猪谁最重

    技术C++三只小猪谁最重 C++三只小猪谁最重C++选择结构学习小案例#includeiostream
    using namespace std;int main()
    {int A = 0;cout "

    礼包 2021年12月2日
  • 1.Rman备份的基本命令

    技术1.Rman备份的基本命令 1.Rman备份的基本命令一.target-连接数据库
    1.本地:[oracle@oracle ~]$ rman target /2.远程:[oracle@oracle

    礼包 2021年12月3日