C++11(1)——新增用法零碎总结

news/2025/1/8 19:54:41/

目录

1. C++11简介

 2. 统一的列表初始化

2.1 {}初始化

2.2 std::initializer_list

std::initializer_list是什么类型:

 std::initializer_list使用场景:

让模拟实现的vector也支持{}初始化和赋值

 


1. C++11简介

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本节课程主要讲解实际中比较实用的语法。

 2. 统一的列表初始化

2.1 {}初始化

C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。比如:

struct Point
{
    int _x;
    int _y;
};
int main()
{
    int array1[] = { 1, 2, 3, 4, 5 };
    int array2[5] = { 0 };
    Point p = { 1, 2 };
    return 0;
}

C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型使用初始化列表时,可添加等号(=),也可不添加。        

struct Point
{
    int _x;
    int _y;
};
int main()
{
    int x1 = 1;
    int x2{ 2 };
    int array1[]{ 1, 2, 3, 4, 5 };
    int array2[5]{ 0 };

    Point p{ 1, 2 };
    // C++11中列表初始化也可以适用于new表达式中
    int* pa = new int[4]{ 0 };
    
    return 0;
}

创建对象时也可以使用列表初始化方式调用构造函数初始化

class Date
{
public:Date(int year, int month, int day):_year(year), _month(month), _day(day){cout << "Date(int year, int month, int day)" << endl;}
private:int _year;int _month;int _day;
};
int main()
{Date d1(2022, 1, 1); // old style// C++11支持的列表初始化,这里会调用构造函数初始化Date d2{ 2022, 1, 2 };Date d3 = { 2022, 1, 3 };return 0;
}

2.2 std::initializer_list

std::initializer_list是什么类型:

 std::initializer_list使用场景:

 

 

让模拟实现的vector也支持{}初始化和赋值

namespace zxj
{template<class T>class vector {public:typedef T* iterator;vector(initializer_list<T> l){_start = new T[l.size()];_finish = _start + l.size();_endofstorage = _start + l.size();iterator vit = _start;typename initializer_list<T>::iterator lit = l.begin();while (lit != l.end()){*vit++ = *lit++;}//for (auto e : l)//  *vit++ = e;}vector<T>& operator=(initializer_list<T> l) {vector<T> tmp(l);std::swap(_start, tmp._start);std::swap(_finish, tmp._finish);std::swap(_endofstorage, tmp._endofstorage);return *this;}~vector(){delete[] _start;_start = _finish = _endofstorage;}private:iterator _start;iterator _finish;iterator _endofstorage;};
}

 3. 声明

c++11提供了多种简化声明的方式,尤其是在使用模板时。

3.1 auto

在C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局部的变量默认就是自动存储类型,所以auto就没什么价值了。C++11中废弃auto原来的用法将其用于实现自动类型推断。这样要求必须进行显示初始化,让编译器将定义对象的类型设置为初始化值的类型。

 3.2 decltype

关键字decltype将变量的类型声明为表达式指定的类型。

 3.3 nullptr

 

4 范围for循环

 

       底层是迭代器实现

5 STL中一些变化  

新容器

用橘色圈起来是C++11中的一些几个新容器,但是实际最有用的是unordered_map和unordered_set。

 

 

 emplace系列的接口,例如emplace_back比push_back好一点


http://www.ppmy.cn/news/909046.html

相关文章

FL Studio 20音乐制作教程

FL Studio 20音乐制作教程 FL Studio 20 中的音乐制作 – 制作 3 首完整曲目 – 只需一天即可管理 FL Studio&#xff0c;音乐、混音和母带制作 课程英文名&#xff1a;FL Studio 20 Music Production In FL Studio for Mac & PC 此视频教程共20.0小时&#xff0c;中英双…

FL Studio21功能测评水果FL音乐制作数字音频工作站

Image Line的FL Studio是软件领域的一股重要力量&#xff0c;在更广泛的意义上被称为“DAW”&#xff08;数字音频工作站&#xff09;&#xff0c;包括从“软件槽盒”到“音乐制作中心”再到“影视后期制作”的所有内容。 我刚习惯了20版作为新手&#xff0c;21版在工作流程中…

如何开发音游所用的节奏点编辑器

开发音游编辑器 写在前面 结合之前做的一个音游Demo&#xff0c;谈谈自己的感受&#xff1b; 一开始&#xff0c;对音游并不是很熟悉&#xff0c;只是轻度玩过几款音游&#xff0c;再加上对乐理知识的欠缺&#xff0c;导致一开始面对这种需求的时候是比较懵逼的。 后来下载了几…

08-音频编辑

08-音频编辑 一、Premiere的音频声道二、添加和删除音频轨道三、在影片中添加音频四、设置音频单位格式五、显示音频时间单位六、设置音频播放速度和持续时间七、音频和视频链接八、设置音频与视频同步九、音频效果9.1 声像平衡器9.2 音频过渡效果9.3 常用音频效果 十、音轨混合…

【作品资料库】scratch作品之双人篮球AI版本

今天我们分享的这个作品是双人篮球ai版本&#xff08;源码已经发到百度网盘永久会员群文件中&#xff0c;目录在&#xff09;&#xff1a; 今天给大家介绍一款非常有趣的闯关游戏《双人篮球》&#xff0c;游戏中我们将扮演小蓝和其他角色进行一场使用特殊规则的投篮比赛。游戏的…

音乐人必备软件-FL studio-Overture-Guitar Pro

作为音乐制作人&#xff0c;对于编曲软件肯定是有自己的需求的&#xff0c;制作的音乐类型不同&#xff0c;可能使用的软件也会有所不同&#xff0c;今天小编就就为大家讲讲音乐制作人的必备软件有哪些。 音乐制作人必备软件大集合常用的有&#xff1a;FL studio、Cubase、Nuen…

超简单集成!手把手教你实现音频编辑能力

如今短视频当道&#xff0c;BGM无处不在&#xff0c;用户在每个能秀的地方都想要加上个性表达的音频。作为一个开发者&#xff0c;需不断探索和迎合用户的行为喜好&#xff0c;音频编辑功能成为用户在编辑个人信息、内容创作、生活分享等场景下的必需品。 华为音频编辑服务&am…

Fl Studio真的不如Cubase或者Logic Pro等电音软件专业吗?

对很多音乐爱好者而言&#xff0c;从单独的欣赏作品&#xff0c;过渡到按自己的心情创作作品&#xff0c;是一段奇妙又欣喜的体验。而音乐编曲&#xff0c;尤其是电音编曲&#xff0c;Daw&#xff08;宿主软件&#xff09;是一个很重要的元素。 编曲软件很多&#xff0c;"…