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

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

在这里插入图片描述

相关内容

热门资讯

我要改变自己800字作文 我要改变自己800字作文  在学习、工作乃至生活中,大家都有写作文的经历,对作文很是熟悉吧,作文根据...
打字作文450字 打字作文450字  令我高兴的一件事  今天上午的电脑课,使我变得很开心。  在上课的时候,老师叫我...
荒岛历险记作文 荒岛历险记作文(精选39篇)  在平凡的学习、工作、生活中,大家都写过作文吧,作文是一种言语活动,具...
居里夫人的资料作文200字 有关居里夫人的资料作文200字  在日常生活或是工作学习中,大家都写过作文,肯定对各类作文都很熟悉吧...
敬老爱老作文 敬老爱老作文(5篇)  在平平淡淡的日常中,大家都尝试过写作文吧,作文是一种言语活动,具有高度的综合...
流浪狗的生活作文 流浪狗的生活作文  在现实生活或工作学习中,大家都写过作文吧,作文根据体裁的不同可以分为记叙文、说明...
今晚的月亮作文 今晚的月亮作文精选10篇  在我们平凡的日常里,大家都有写作文的经历,对作文很是熟悉吧,借助作文人们...
90后的我们优秀作文 90后的我们优秀作文  在日常学习、工作或生活中,许多人都写过作文吧,作文是由文字组成,经过人的思想...
写月亮的作文 写月亮的作文15篇  在日常生活或是工作学习中,大家总免不了要接触或使用作文吧,作文要求篇章结构完整...
留在心底的风景作文 留在心底的风景作文留在心底的风景公园的湖泊旁,一直都有一把褐黄色的秋千椅,春天,会有柳枝攀在她的链索...
网购,让生活更精彩作文 网购,让生活更精彩作文  记得商场打折时人头攒动的拥挤场面吗?记得妈妈和店老板为了几块钱互不让步的尴...
秋之韵作文 秋之韵作文精选10篇  在学习、工作乃至生活中,大家最不陌生的就是作文了吧,作文是人们把记忆中所存储...
写给二十年后的自己的一封信作... 写给二十年后的自己的一封信作文(精选12篇)  无论是在学校还是在社会中,大家都经常看到书信的身影吧...
榜样的作文600字 榜样的作文600字五篇  在日常学习、工作和生活中,许多人都写过作文吧,借助作文人们可以反映客观事物...
我爱科学作文400字 我爱科学作文400字(精选25篇)  在平平淡淡的日常中,大家都写过作文,肯定对各类作文都很熟悉吧,...
跳蚤书市作文 跳蚤书市作文  在平时的学习、工作或生活中,大家都写过作文吧,作文是人们以书面形式表情达意的言语活动...
成长经历作文400字 成长经历作文400字(通用41篇)  在日常生活或是工作学习中,大家都写过作文,肯定对各类作文都很熟...
人生值得品味作文 人生值得品味作文我欣赏香气四溢的茉莉;我喜爱高贵典雅的百合;我惊叹一现而过而又美丽无比的昙花。然而,...
保护环境作文1000字:维护... 保护环境作文1000字:维护生态和平  在日常学习、工作和生活中,大家都尝试过写作文吧,借助作文可以...
游览的作文 关于游览的作文三篇  关于游览的作文1  国庆期间,爸爸妈妈带我到厦门旅游,我玩得可开心啦!特别令我...