c++新特性学习笔记
这里有一些是新特性,有一些是为了描述新特性另外说明的一些东西。
Variadic Templates …
参考网址:https://blog.csdn.net/zwvista/article/details/5450759?locationNum=11&fps=1
这个好像和Java的类似,需要注意的是新名词的出现,//模板参数包,函数参数包,解包运算符;
实现方式是递归。
forward
请先看下面的右值引用
https://www.cnblogs.com/xiaoshiwang/p/9589008.html
写法:forward
在这之前请先了解左值引用和右值引用。
举例:func(100);//实参为右值引用。
还有一个move函数,就是转化为右值的。move()
右值引用
于心不忍,还是给参考连接。
https://blog.csdn.net/qq527703883/article/details/60141034?locationNum=7&fps=1
我感觉就是看这个 总的语句是否分配了空间 ,没有分配就是右值引用
B站侯捷老师的视频 ,这个视频对于的右值引用做了十分详细的讲述,后面还有move和forward的讲解,很深入。强力推荐。
nullptr nullptr auto
这三个东西挺简单的,前两个之间看源码
auto是一个很好用的东西,让编译器推导变量类型。
示例:for(vector
:for(auto it=v.begin();it!=v.end();it++)
C++11下的初始化
为了统一化管理,引入{}花括号初始化。
initializer_list:这个东西可以支持我们初始化的花括号使用
在使用vector
参考网址:https://mp.weixin.qq.com/s?src=11×tamp=1593334114&ver=2427&signature=Dly5GAhXZ8v*vMicn54oEe8jlhPoK-5GTLlA-*VpY1On1J9l7VsvuqLU3jQvsigf3QKraAujVskn6yZqi3kVLccyK6PdBbpOK44zhhCQGa-UGxUSKkNnHNEEMkbGycql&new=1
注意:虽然很长,但是感觉讲的很好。但是我认为有一个错误,源码是没有内含数组的,只是拿了一个指针和长度进来。可能版本不同把,我就没有深究了。对于它的使用标准库真是大量用了。
1 | int a;cin>>a; |
explicit
多用于构造函数中,explicit构造函数是用来防止隐式转换的。很小的一个东西,看之前如果知道类对象的隐式转换和显示转换就很容易懂了。
新for循环
for( decl : coll ){ statement}
搭配auto香的一批,该有全局的begin()和end(),参数放容器。
https://www.jb51.net/article/87283.htm这里有它的底层源码,底层还是用了常用的for,穿入头指针和尾指针,头指针++,当头指针等于尾指针时退出循环。右值引用,for结束则析构。
=default ,=delete
https://www.cnblogs.com/Li-F/p/11517192.html
https://blog.csdn.net/u010640235/article/details/51286445
在写代码的时候,’=’是不能省略的,和两个关键字是一个整体,或者说,这就是一个关键字。
生成类的时候,会自动调动四种函数,=delete会禁用删除当前函数,=dafault用于显式要求编译器提供合成版本的四大函数。
1 | class Text |
Alias template
用using定义别名,这个和typedef类似,一个最大的不同是using可以别名化模板。
1 | template<typename T> |
Template Template Parameter
模板模板参数,这个感觉用的很少,想深究的自己去看。
Type Alias
使用using定义别名,和typedef功能一样
示例:using func = void(*)(int,int);
扩充,在string头文件中,都有basic_string
basic_string的源码在它的.h文件里面,三千多行,我就不看了。
noexcept
https://blog.csdn.net/xiaoguyin_/article/details/79798544
当函数不会有异常的时候,是应只当noexcept,并且是在关键字实在函数的声明或者是定义之后的。
对于异常,侯捷老师有专门的一讲课,实际开发中异常处理经常出现,值得深究。
override
https://blog.csdn.net/fanyun_01/article/details/79122136
当父类的虚函数在子类中实现的时候使用,可以避免派生类中忘记重写虚函数的错误
当参数不一致时,编译器会报错给予提示
final
表明当前类是不可继承的。
说白了就是当前类是断子绝孙的,只有爸爸,没有儿子。
另外,函数后面加上const,https://wenwen.sogou.com/z/q825346133.htm
说明当前函数为只读操作
decltype
http://c.biancheng.net/view/3722.html 这篇讲的比较深入
编译器自行推导类型。
这篇的使用比较直观
lambda
csdn参考地址
B站侯捷老师视频
知道语法即可,深入请自行了解。
tuple
csdn参考连接
可以看作是一个结构体或者是泛化的pair,只不过配备了很多的函数进行操作。
用于给各位学习者参考,仅供参考。