C++11(一)
创始人
2024-02-23 23:52:13
0

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

文章目录

  • 一、列表初始化
    • 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<

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

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

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

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

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

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

二、声明

1.auto

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

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

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

map::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 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

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

在这里插入图片描述

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...