【C++】C++11的新特性

目录

    • 一. 列表初始化
      • 1. 列表初始化的原理: initializer_list
    • 二. 类型的声明
      • 1. auto
      • 2. decltype
    • 三. nullptr
    • 四. 范围 for
    • 五. STL容器变化
    • 六. 类的新功能

一. 列表初始化

  • 在 C 语言中, 就可以使用 {} 对数组或结构体进行初始化, 而 C++11 扩大了 {} 的使用范围, 使其可以初始化所有的内置类型和自定义类型, 并且使用时可以省略 =.
int main()
{// 可以使用 {} 给所有类型初始化, 并且可以省略 赋值符号int arr1[]{ 1,2,3 };int a1 = { 1 };int a2{ 2 };int* p1 = { &a1 };int* p2{ nullptr };int* p3 = new int{3};vector<int> v1 = { 1 };vector<int> v2{ 1,2 };return 0;
}

1. 列表初始化的原理: initializer_list

  • initializer_list 是 C++11 新添加的一个类, 支持迭代器. initializer_list - C++ Reference
    在这里插入图片描述
    当使用初始化列表时, initializer_list 会自动将一个由相同元素构成的列表转化为一个 initializer_list 的对象;
    但需要注意的是, initializer_list 对象中的元素实际是常量值, 是无法改变 initializer_list 对象中元素的值.
    在这里插入图片描述
  • 在 C++11 允许构造函数和其他函数把初始化列表当做参数.
    在这里插入图片描述
  • 当使用列表初始化时, 若列表初始化中的参数与类的构造函数相匹配, 那么就会直接调用构造函数;
    若不匹配或列表赋值时, 则会创建 initializer_list 的对象, 调用参数为 initializer_list 的构造或赋值函数.
int main()
{//直接调用构造函数string s1{"123"};//调用参数为 initializer_list 的构造函数vector<int> v1{ 1,2 };//调用参数为 initializer_list 的赋值函数v1 = { 1,2,3 };return 0;
}

二. 类型的声明

1. auto

  • 在 C++98 中 auto 是一个存储类型的说明符, 表明变量是局部自动存储类型, 但在局部域中定义的局部变量默认就是自动存储类型, 所以auto就没什么大用;
    在 C++11 中改变 auto 的用法, 将其实现自动类型推导. 不过必须对 auto 定义的变量进行显示初始化, 这样编译器才能将定义对象的类型设置为初始化值的类型.
    在这里插入图片描述

2. decltype

  • decltype 可以获取参数的类型, 将变量的类型声明为表达式指定的类型;
  • 类似 typeid().name(), 不过 decltype 获取的是真正的类型, 可以当作类型声明使用, 而 typeid().name() 获取的只是字符串.
    在这里插入图片描述
    与 auto 相比:
    decltype 需要参数;
    decltype 无需显式实例化, 可以直接定义;
    decltype 可以作为模板参数传递.

三. nullptr

由于 C++11 之前空指针 NULL 被定义成字面量 0, 在传参等情况会导致二义性, 所以在 C++11 中新增了关键字 nullptr, 用于表示空指针.

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

四. 范围 for

范围 for 的功能就是遍历容器并取出所有的元素;
而底层使用的就是迭代器, 所以支持迭代器的容器就会支持范围 for.

//此处的 it 类型为迭代器的类型
for (auto it = begin(); it != end(); it++)
{// 对迭代器进行操作
}//此处的 e 类型为容器元素的类型
//若希望减少拷贝或修改容器元素, 可以使用引用类型, (auto& e : 容器)
for (auto e : 容器)
{// 对 e 进行操作(e 为容器元素的拷贝)
}

五. STL容器变化

  • 新增容器
    C++11 为 STL 增加了几种新容器, unordered_map/unordered_set 都是使用哈希思想实现的容器, 底层为散列表.
    在这里插入图片描述
  • 新增接口
    initializer_list 系列的接口;
    在这里插入图片描述
    右值引用的相关接口;
    在这里插入图片描述

新增了 const 迭代器的接口.
在这里插入图片描述

六. 类的新功能

C++11 类的主要增加了以下新功能:

默认成员函数增加了移动构造和移动赋值;
允许类的成员变量使用缺省值进行初始化;
增加强制生成和强制禁止生成默认函数的关键字 default 和 delete;
继承和多态部分增加 final 和 override 关键字.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/293052.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql-数据库范式和Mysql安装

文章目录 数据库三范式第一范式&#xff1a;1NF第二范式&#xff1a;2NF第三范式&#xff1a;3NF Yum安装CentOS7 yum安装解决“Access denied”拒绝访问异常 数据库三范式 第一范式&#xff1a;1NF 第一范式&#xff1a;数据库中无重复的列&#xff0c;每一列都是不可分割的…

乐乐音乐鸿蒙版-支持krc歌词(动感歌词、翻译和音译歌词)

简介 乐乐音乐主要是基于HarmonyOS开发的音乐播放器&#xff0c;它支持lrc歌词和动感歌词(ksc歌词、krc歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 开发环境 ArkTS、Stage模型、SDK3.1、 API 9 注&#xff1a;没试过在真机条件下调试。 功…

Java基础学习: JDK动态代理

文章目录 一、什么是JDK动态代理二、JDK动态代理的特点三、JDK动态代理类如何使用四、JDK动态代理原理分析1、创建代理对象2、生成代理类 一、什么是JDK动态代理 JDK动态代理是Java提供的一种动态生成代理类和代理对象的技术。它主要利用Java的反射机制实现&#xff0c;在运行…

Open CASCADE学习|GeomFill_Frenet

GeomFill_Frenet继承自GeomFill_TrihedronLaw类。GeomFill_Frenet类主要用于实现Frenet标架的计算。Frenet标架是一个沿曲线移动的局部坐标系&#xff0c;它由切向量、法向量和副法向量组成&#xff0c;常用于机器人学、计算机图形学等领域。 class GeomFill_Frenet : publi…

docker 数据卷

Docker数据卷是Docker中的一个核心机制&#xff0c;用于实现容器间数据的持久化和共享。它是宿主机上的一个特殊目录&#xff0c;可以供一个或多个容器使用。容器删除时&#xff0c;不会删除其挂载的数据卷&#xff0c;也不会存在类似的垃圾机制对容器存在的数据卷进行处理。 …

每日面经分享(Spring Boot: part2 DAO层)

1. Spring Boot DAO层的作用 a. 封装数据访问逻辑&#xff1a;DAO层的主要责任是封装与数据访问相关的逻辑。负责处理与数据库的交互&#xff0c;包括数据的增删改查等操作。通过将数据访问逻辑统一封装在DAO层中&#xff0c;可以提高代码的可维护性和可重用性。 b. 解耦业务逻…

【vue3学习笔记(二)】(第141-143节)初识setup;ref函数_处理基本类型;ref函数_处理对象类型

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 本篇内容对应课程第141-143节 课程 P141节 《初识setup》笔记 1、setup是所有组合式API“表演的舞台”&#xff0c;组件中所用到的所有数据、方法、监视数据、生命周期钩子等都需要配置在setup中。 2、setup的两种返回值&…

【Linux】socket套接字

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 目录 &#x1f449;&#x1f3fb;IP地址和端口号pid和port的关系 &#x1f449;&#x1f3fb;TCP和UDP&#x1f449;&#x1f3fb;网络字节序&…

NineData与StarRocks商业化运营公司镜舟科技完成产品兼容认证

近日&#xff0c;镜舟科技与NineData完成产品兼容测试。在经过联合测试后&#xff0c;镜舟科技旗下产品与NineData云原生智能数据管理平台完全兼容&#xff0c;整体运行高效稳定。 镜舟科技致力于帮助中国企业构建卓越的数据分析系统&#xff0c;打造独具竞争力的“数据护城河”…

2-HDFS常用命令及上传下载流程

HDFS NameNode 安全模式(safemode) 当NameNode被重启的时候&#xff0c;自动进入安全模式 在安全模式中&#xff0c;NameNode首先会触发edits_inprogress文件的滚动。滚动完成之后&#xff0c;更新fsimage文件 更新完成之后&#xff0c;NameNode会将fsimage文件中的元数据加…

STM32——超声测距HC_SR04记录

一、HC_SR04简述 HC-SR04超声波测距模块可提供 2cm-400cm的非接触式距离感测功能&#xff0c;测距精度可达高到 3mm&#xff1b;模块包括超声波发射器、接收器与控制电路。 基本工作原理&#xff1a; (1)采用IO 口TRIG 触发测距&#xff0c;给最少10us 的高电平信呈。 (2)模块…

一文教你轻松领取华为云优惠券

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人选择使用云服务来满足他们的需求。华为云作为全球领先的云服务提供商之一&#xff0c;为用户提供了丰富的产品和服务。为了帮助用户更好地体验华为云服务&#xff0c;本文将为大家详细介绍如何轻松领取华为云优惠券。…

Taskflow:限制最大并发度( Limit the Maximum Concurrency)

定义信号量Semaphore Taskflow提供了一个机制&#xff0c;tf::Semaphore&#xff0c;用于限制任务部分中的最大并发。您可以让任务在执行工作之前/之后获取/释放一个或多个信号量。一项任务可以获取和释放信号量&#xff0c;或者只是获取或只是释放它。tf::Semaphore对象以初始…

MySQL介绍

1 什么是Mysql MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用结构化查询语言&#xff08;SQL&#xff09;进行数据库管理。自上世纪90年代中期以来&#xff0c;MySQL凭借其易用性、稳定性和高效性能&#xff0c;赢得了广泛的用户群体…

政安晨:【Keras机器学习实践要点】(三)—— 编写组件与训练数据

目录 介绍 编写组件 训练模型 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 介绍 通过 Ker…

手写简易操作系统(十七)--编写键盘驱动

前情提要 上一节我们实现了锁与信号量&#xff0c;这一节我们就可以实现键盘驱动了&#xff0c;访问键盘输入的数据也属于临界区资源&#xff0c;所以需要锁的存在。 一、键盘简介 之前的 ps/2 键盘使用的是中断驱动的&#xff0c;在当时&#xff0c;按下键盘就会触发中断&a…

Abaqus周期性边界代表体单元Random Sphere RVE 3D (Mesh)插件

插件介绍 Random Sphere RVE 3D (Mesh) - AbyssFish 插件可在Abaqus生成三维具备周期性边界条件(Periodic Boundary Conditions, PBC)的随机球体骨料及骨料-水泥界面过渡区(Interfacial Transition Zone, ITZ)模型。即采用周期性代表性体积单元法(Periodic Representative Vol…

1.8 python 模块 time、random、string、hashlib、os、re、json

ython之模块 一、模块的介绍 &#xff08;1&#xff09;python模块&#xff0c;是一个python文件&#xff0c;以一个.py文件&#xff0c;包含了python对象定义和pyhton语句 &#xff08;2&#xff09;python对象定义和python语句 &#xff08;3&#xff09;模块让你能够有逻辑地…

Cookie 与 Session

目录 一、获取Cookie/Session 1、理解Cookie 2、理解Session 3、Cookie 和 Session 的区别 4、获取Cookie 4.1 传统获取Cookie 4.2 简洁获取Cookie 5、Session 存储和获取 5.1 Session存储 5.2 Session读取 5.3 简洁获取 Session 一、获取Cookie/Session 1、理解Co…

【Linux】详解软硬链接

一、软硬链接的建立方法 1.1软链接的建立 假设在当前目录下有一个test.txt文件&#xff0c;要对其建立软链接&#xff0c;做法如下&#xff1a; ln就是link的意思&#xff0c;-s表示软链接&#xff0c;test.txt要建立软链接的文件名&#xff0c;后面跟上要建立的软链接文件名…