首页 > 其他分享 >新特性集锦:

新特性集锦:

时间:2023-08-18 12:14:05浏览次数:27  
标签:std arr span variant 特性 char 集锦 类型

新特性集锦:

std::span(C++20)

使用std::span可以帮助我们更好地管理数组,从而避免越界问题。

  1. 使用std::span的构造函数来创建一个指向char数组的span对象,并指定其长度。这样可以确保我们只访问数组中有效的元素,而不会越界。

    char arr[] = "hello world"; 
    std::span<char> s(arr, 11); // 创建一个指向arr的span对象,长度为11 
    
  2. 使用std::span的at()函数来访问数组元素,而不是使用[]运算符。at()函数会检查索引是否越界,如果越界则会抛出std::out_of_range异常。

char arr[] = "hello world"; 
std::span<char> s(arr, 11); 
char c = s.at(5); //访问第6个元素,不会越界 
char d = s.at(20); //访问第21个元素,会抛出std::out_of_range异常
  1. 使用std::span的subspan()函数来创建一个子span对象,从而避免访问超出数组范围的元素。

    char arr[] = "hello world";
    std::span<char> s(arr, 11); 
    std::span<char> sub = s.subspan(3, 4); // 创建一个从第4个元素开始,长度为4的子span对象 ```
    

std::variant(C++17)

std::variant是C++17中引入的一个新特性,它是一种类型安全的联合类型,可以存储多种不同类型的值,但只能同时存储其中的一种类型,是Union的升级版。 可以理解成类似于python中的无类型变量。类型安全是指在编程语言中,对于每个变量和表达式都有一个明确的数据类型,并且编译器会在编译时检查类型是否匹配,从而避免了类型不匹配的错误。这代表std::variant对一个变量可以匹配多种类型。

使用std::variant需要包含头文件,下面是一个简单的示例:

#include <variant> 
#include <iostream> 
int main() {
	std::variant<int, double, std::string> v;
    v = 42;
    std::cout << std::get<int>(v) << std::endl; // 输出42
    v = 3.14;
    std::cout << std::get<double>(v) << std::endl; // 输出3.14
    v = "hello";
    std::cout << std::get<std::string>(v) << std::endl; // 输出hello
    return 0;
} 

如果我们使用std::get函数获取v中存储的值的类型与实际存储的类型不一致,将会抛出std::bad_variant_access异常。

标签:std,arr,span,variant,特性,char,集锦,类型
From: https://www.cnblogs.com/fireinstone/p/17640151.html

相关文章

  • 【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战
    并发编程介绍当今软件开发领域越来越强调性能和伸缩性,因此,利用并发编程可以更好地利用计算资源,提高应用程序的性能和响应速度。以下是一些关于并发编程的相关信息供您参考。什么是并发编程并发编程是指在一个程序中同时执行多个独立的计算任务,并通过各种手段来协调不同任务之间的交......
  • 面向对象的三大特性
    面向对象的三大特性(2007-05-2123:58:41)转载▼   1.封装:面向对象编程核心思想这一就是就是将数据和对数据的操作 封装在一起. 通过抽象,即从具体的实例中抽取共同的性质形成一般的概念,比如类的概念.   2.继承:继承体现了一种先进的编程模式.子......
  • Angular 应用启用 PWA 特性的 Angular CLI 命令行
    ngadd@angular/pwa--project<project-name>这条命令在AngularCLI中,是用于将一个标准的Angular应用程序转化为一个渐进式网页应用(PWA,ProgressiveWebApp)的命令。首先,我们需要理解PWA是什么。PWA是一种可以提供类似于原生应用体验的网页应用。它可以在离线时工作,可被......
  • 什么是电商解决方案的 Composable 特性
    电商网站解决方案中的"composable"特性,或者叫"组合性"特性,是指电商平台的各种服务、功能和模块可以自由组合,以满足不同的业务需求。这种设计理念在现代电商平台的架构设计中得到了广泛的应用和实践。"组合性"的优点是显而易见的。首先,它可以提高系统的灵活性和可扩展性。通......
  • 【技术积累】Java 8 新特性
    一、Lambda表达式Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升1、举例(o1,o2)->Integer.compare(o1,o2)2、格式......
  • C++11的新特性
    2.1.1longlong类型除字符和布尔类型外,其他整形用于表示不同尺寸的整形,一个longlong至少和一个long一样大,其中,数据类型longlong是在C++11中新定义的2.2.1列表初始化 ......
  • 【校招VIP】前端校招考点之vue底层特性
    考点介绍:大家在面试途中遇到的相对多的问题,也是难点的问题一般都有vue底层原理。对于只会用但是不懂的小白来说真是太痛苦了,仅仅能说出来一些数据劫持,双向数据绑定,虚拟dom树的名词来说远远不够。一、考点题目1、Vue实现数据双向绑定的原理是什么?解答:Vue实现数据双向绑定的原......
  • 事物的四大特性和隔离级别
    3.1.事物的四大特性和隔离级别原子性:不可分割的操作单元,要么全部成功,要么回滚。一致性:如果执行事物之前数据库是一致的,那么执行后还是一致的。隔离性:事物操作之间彼此独立和透明,互不影响。持久性:事物一旦提交,其结果就是永久的。未提交读:允许脏读,其他事物只要修改了数据,即使未......
  • 多线程|线程的特性
      ......
  • TPT19新特性
    随着汽车行业日新月异的发展,软件定义汽车已逐渐成为大家的追求目标,汽车中的嵌入式软件版本不断迭代,功能也不断增强。为了顺应行业的高速发展和满足客户复杂多变的需求,TPT也在悄悄成长,又一次完成蜕变。接下来随我一起走进TPT19的新世界。 首先,我们通过一则短片,了解TPT19的新特性......