C++11(一)

news2024/11/25 5:00:57

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸
在这里插入图片描述

文章目录

  • 一、列表初始化
    • initializer_list
  • 二、声明
    • 1.auto
    • 2.decltype
    • 3.nullptr
  • 三、C++11 STL中的变化
    • 1.array
    • 2.forward_list
    • 3.STL其他变化
  • 四、C++关键字新功能
    • 1.defualt强制生成
    • 2.delete
    • 3.final
    • 4.override

一、列表初始化

之前呢{}就是对于结构体和数组进行统一地列表初始值设定
C++11扩大了用大括号括起来地列表初始化的使用范围,使其可对所有的内置类型和用户自定义类型,使用列表初始化时,可添加等号,也可以不加

strcut Point
{
	Point(int x=1,int y=1)
		:_x(x)
		,_y(y)
	{}
  int _x;
  int _y;  
};
int main()
{

    int x1=1;
    int x2={3}
    int x3{2};
    
    int array1[]{1,2,3,4,5};//直接就去掉=
    int array2[5]{0};
    
    Point p(1,2);//调用构造函数初始化
    Point p{1,2};
    Point p = {1,2};
    
    //C++11种列表初始化也可以适用于new表达式中
    int*pa =new int[4]{0};
    return 0;
}

initializer_list

{}并不是运算符,所以说并不是重载{},{}其实是initializer_list

auto x={1,2,3,4}
cout<<typeid(x).name();//initializer_list<int>

其实,初始化列表本来用意是给容器用的

vector<int> v1={1,2,3,4,5,6};
vector<int> v2{1,2,3,4,5,6};
list<int> lt1={1,2,3,4,5,6};
list<int> lt2{1,2,3,4,5,6};

在这里插入图片描述
initializer_list也像是一个容器,可以像迭代器一样的去访问,但是initializer_list是一个写死的数组,不支持push_back和pop_back

在这里插入图片描述
C++11之后,所以的容器都增加了initializer_list的构造函数。
那既然initializer_list主要是为容器而产生的,那结构体/类成员为什么也支持呢

vector<Date> v1={d1,d2,d3};
vector<Date> v2={{1,2,3},{2,3,4},{3,4,5}};

同时,initializer_list也能够初始化pair,所以map也能够使用

二、声明

1.auto

auto就是自动推导类型,但是它不能作为参数的类型自动推导

void func(auto a);//也就是说这是不行的

在某些场景下就非常好用,但是也有弊端,auto会降低可读性

map<string,string>::iterator it = x.begin();
auto it = x.begin();

2.decltype

declare type
用户声明类型,也可以理解为推导类型

像我们以前使用的typeid(x).name(),它只能够知道是哪种类型,但是不能够拿这个得到的字符串再去定义对象

typeid(x).name() y=20;//报错
//而C++11新增了关键字decltype来解决
decltype(x) y=20;

3.nullptr

源码中,有这样一段代码

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

也就是说,在C++中,C的NULL被定义成了字面量0,因为0既能代表常量也能代表地址,由于清晰安全的角度,C++11中有了nullptr,用于表示空指针。

三、C++11 STL中的变化

C++11新增容器
1.unordered_set
2.unordered_multiset
3.unordered_map
4.unordered_multimap
5.array
6.forword_list

1.array

array相比如vector而言,是一个静态的数组

template<class T,size_t N/*非类型模板参数*/> class array;

为什么有array?
①希望数组容器化
②C的数组边界问题
C的数组采用的方式是设岗抽查,只有少量的越界能够查出来,比如开了一个a[10]的数组,可能方式a[15]并不会被检查到。而给一个array,超过非类型模板N,就被查到了,所以array检查严格。

但是array并没有什么用处
因为array并不如vector,可以用vector+resize来进行开空间,效率上也得到了保证。而且array是开在栈上的,如果数据量过大,还会栈溢出

2.forward_list

forword_list就是单向链表,比起list双向循环链表来说,forword_list优势就只在于节省了一点空间,它只提供了insert_after在末尾插入,所以实际如果没有特殊需求,是不会用forward_list的

3.STL其他变化

①增加initializer_list的初始化化
②比较鸡肋的接口cbegin,cend
③移动构造和移动赋值(后面说)
④右值引用参数的插入
⑤手动缩容shrink_to_fit
等等

四、C++关键字新功能

1.defualt强制生成

Person(Person&&p) = defualt;
//因为移动构造需要满足条件才自动生成
//所以这里可以强制生成

2.delete

delete除了释放资源之外,还有另外的作用
比如我需要防拷贝

Person(const Person& p ) =delete;
Person& operator=(const Person&p) =delete;
//让编译不准生成

3.final

①修饰类,表示最终类
②修饰虚函数,表示该虚函数不能被重写

4.override

放在函数后面,表示它必须去重写某个父类的虚函数,如果达不到该条件,就进行报错。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NOIP 装箱问题

题目&#xff1a;[NOIP2001]装箱问题 &#xff0c;哈哈&#xff0c;我们今天来看一道很古老的题嘛&#xff0c;这是选自NOIP上的一道题&#xff0c;好了&#xff0c;我们一起来看看题意吧&#xff1a; 考虑到直接复制题目&#xff0c;或者截屏的方式不是很方便阅读&#xff0…

常见的网络协议

目录 一、TCP/IP协议簇 二、网络设备与五层模型对应关系&#xff1a; 三、常用网络协议总结&#xff08;TCP/IP协议簇&#xff09; 四、应用层服务协议 五、传输层协议组 TCP_UDP 六、网络层协议 IP_ICMP_ARP 七、物理层协议 MAC子层协议 一、TCP/IP协议簇 OSI七层模型…

视频怎么转换为音频文件?快来掌握这几种方式

大家平时在下载网课资源进行学习的时候&#xff0c;看久了眼睛也会开始疲劳&#xff0c;而且有些视频的画面看起来很枯燥。其实我们可以使用一些软件把视频中的音频分离出来&#xff0c;直接收听音频也可以学到知识&#xff0c;而且我们还可以处理其他的事情&#xff0c;是不是…

《计算机体系结构量化研究方法第六版》1.5 集成电路中的功耗和能耗趋势

1.5.1 功耗和能耗&#xff1a;系统视角 Q1&#xff1a;处理器需要的最大功耗是多少&#xff1f; 如果处理器的预期功耗大于电源系统能够提供的功耗&#xff08;试图汲取的电流大于电源系统可以提供的电流&#xff09;&#xff0c;通常会导致电压下降而让器件无法工作。在峰值…

食谱类小程序开发,升级美食服务质量

网络时代&#xff0c;人们可以在网上快速获取到各种资源信息&#xff0c;疫情的影响让人们被封控在家里出不了门&#xff0c;这也就给人们提供了一个回归厨房的契机&#xff0c;很多人在此期间开启了自己的美食制作之旅&#xff0c;朋友圈也变成了一个美食分享社区&#xff0c;…

AlphaFold2源码解析(1)--安装使用

AlphaFold2源码解析(1)–安装使用 AlphaFold2有两种安装方式&#xff1a; 具体可以参考我之前写的博客&#xff1a; Alphafold docker 安装: 参考GitHub&#xff1a;https://github.com/deepmind/alphafold 一步一步安装就可以了&#xff0c; Alphafold 非docker 安装指南 如…

基于PHP+MySQL蚕豆酱厂管理系统的设计与实现

论文阐述了安庆市胡玉美蚕豆酱厂管理系统的设计与实现&#xff0c;并对该系统的需求分析及系统需要实现的设计方法作了介绍。该系统的基本功能包括用户登录&#xff0c;管理员信息管理&#xff0c;车间主任信息管理&#xff0c;采购员信息管理&#xff0c;生产计划管理&#xf…

【正点原子FPGA连载】 第十七章 HDMI彩条显示实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十七章 HDMI彩…

基于PLC控制四自由度气动式机械手设计

目 录 1 绪论 1 1.1 机械手的概述 1 1.2 机械手的发展史 1 1.3 气动技术及气动机械手的发展过程 2 1.4 机械手未来的发展趋势 3 1.5 本课题研究内容 4 1.6 课题研究的意义 4 2 机械手的总体设计方案 6 2.1 机械手的工作原理及系统组成 6 2.2 机械手基本形式的选择 7 2.3 驱动机…

VO, DTO, DO, PO四胞胎傻傻分不清楚?那快来看这篇文章!

概念 VO(View Object) 视图对象&#xff0c;用于展示层&#xff0c;作用是把某个指定页面&#xff08;或组件的所有数据封装起来&#xff09;。 DTO(Data Transfer Object) 数据传输对象&#xff0c;这个概念来源于J2EE的设计模式&#xff0c;原来的目的是为了给EJB&#x…

第2关:创建表

为了完成本关任务&#xff0c;你需要掌握&#xff1a;如何使用HBase shell指令创建表。 Hbase shell操作 启动HBase之后&#xff0c;我们输入hbase shell进入到Hbase shell命令行窗口&#xff1a; hbase shell 在这里我们输入hbase shell会启动一个加入了一些Hbase特有命令的…

list模拟实现(15)

目录 1、简单框架 1、list.h 2、test.cpp 2、list迭代器实现 1、list.h 2、test.cpp 3、思考 1、迭代器中的拷贝构造和赋值重载是否需要自己实现&#xff1f;析构呢&#xff1f; 2、体会类型的力量 3、const迭代器实现 1、list.h 2、test.cpp 4、重载迭代器的oper…

【附源码】计算机毕业设计JAVA知识库系统

【附源码】计算机毕业设计JAVA知识库系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybatis …

python 使用enumerate()函数详解

一、enumerate() 函数简介 enumerate()是python的内置函数&#xff0c;将一个可遍历iterable数据对象(如list列表、tuple元组或str字符串)组合为一个索引序列&#xff0c;同时列出数据和数据下标&#xff0c;一般用在for循环当中。 函数返回一个enumerate对象&#xff0c;是一…

Metabase学习教程:仪表盘-4

交叉筛选&#xff1a;图表联动更新仪表盘筛选器 只需单击几下&#xff0c;就可以配置任何图表或表以更新仪表盘筛选器。 Metabase允许您自定义当您单击仪表盘部件。本文将详细介绍如何设置部件更新仪表盘上筛选器在我们称之为交叉筛选. 下面是我们要连接的仪表盘&#xff1a…

如何使用轻量应用服务器搭建Veno File Manager个人私有云网盘?

之前有介绍过使用可道云搭建个人云网盘系统&#xff1a;如何使用闲置的云服务器搭建一个属于自己的可道云私人云网盘&#xff0c;这个教程我将介绍使用Veno File Manager搭建个人云网盘&#xff0c;搭建的过程很相似&#xff0c;都采用的是宝塔面板作为辅助&#xff0c;可道云搭…

40 行 Python 代码,写一个 CPU

一、引言 CPU 如何工作&#xff1f;是困扰初级用户一个迷雾般的难题。我们可能知道诸如程序计数器、RAM、寄存器的只言片语&#xff0c;但尚未对这些部件的工作原理及整个系统的协同有清晰和总体的认识。 本文使用四十行 Python 代码来实现一个最简单的 CPU。使它可编程&…

红眼睛微型成像仪拍照、存储与参数复位

拍照在 IFD-x 设备中有两种含义&#xff0c;一是将照片保存于设备内部的存储器&#xff08;硬拍照&#xff09;&#xff0c;二是将照片 保存于计算机或者手机&#xff08;软拍照&#xff09;。 &#xff08;1&#xff09;硬拍照 有两种方法来触发一次硬拍照&#xff0c;一…

【树莓派不吃灰】Linux篇⑩ 学习例行性工作排程(核心概念)

目录1. 什么是例行性工作排程2. 仅运行一次的工作排程3. 循环运行的例行性工作排程4. 可唤醒停机期间的工作任务5. 重点回顾❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2022-11-28 ❤️❤️ 本篇更新记录 2022-11-28 ❤️&…

5、python中的文件操作

文章目录文件操作介绍文件的打开操作open()文件的关闭操作os模块关于操作系统关于路径json模块将python对象编码成json字符串序列化和反序列化常用参数将json字符串解码为python对象存储为excel文件文件操作介绍 文件的作用&#xff1a;数据的持久化存储 一个程序在运行过程中…