侯捷c++1114新标准
侯捷c++11&14新标准
文章目录
- 侯捷c++11&14新标准
- 引言
- variadic templates
- Spaces in Template Expressions
- nullptr
- auto
- 初始化(initializer_list<>)
- explicit(for ctors taking more than one argument)
- Range-based for statement
- 全局函数 begin() end()
- =default =delete
- Alias Template 化名
- template template parameter
- Type Alias, noexcept, override, final
- Type Alias
- noexcept
- override
- final
- decltype
- Lambdas
- Variadic Templates
- 标准库
- Rvalue reference
- array forward_list
- Hashtable
- Hash function
- tuple
引言
新特性包括语言和标准库两个部分
标准库是以头文件的形式呈现(不加.h)
cplusplus.com
variadic templates
Spaces in Template Expressions
nullptr
nullptr代替 0或者NULL
auto
不确定变量类型 让编译器自己推
比如:代替迭代器、lambda表达式
初始化(initializer_list<>)
变量的后面直接放大括号
int values[]{1, 2, 3}
initializer_list val {?, ?, ?, …} 用一个array来接收 其实是保存头指针
cout << max({ 1, 2, 3 }) << " " << min({string(“a”), string(“b”), string(“c”) }) << endl;
explicit(for ctors taking more than one argument)
2.0之前让编译器不要自作主张
#include <iostream>
using namespace std;class A
{
public://这里用explicit关键词来修饰类构造函数.explicit A(int i = 5, int j = 10){m_a = i;m_b = j;}
private:int m_a;int m_b;
};int main()
{A s;//这样直接赋值,会被提示错误,因为explicit抑制隐式转换的进行s = 10;//这样会报错!!!//当然显示转换还是可以的.s = A(20);system("pause");return 0;
}
Range-based for statement
for(dec1 : col){statement
}
全局函数 begin() end()
e.g. begin(vector…) 相当于 vector.begin()
=default =delete
=default 表示子类直接继承父类
=delete 表示子类不写这个函数
有指针的类就有big three(即默认构造,拷贝构造,析构)
Alias Template 化名
template<typename T>
using Vec = vector<T, MyAllo<T>>;
Vec<int> coll;
等价于
vector<int, MyAllo<int>> coll;
template template parameter
template<typename T, template typename Container>
template<typename T, template<typename U> typename Container>
class XCls{private:container<T> c;
};
template<typename T>
class test{private:T t;
};
template<typename T>
using mlst = list<T, allocator<T>>;// Alias Template 化名int main(){XCls<string, test> myContain;// XCls<string, list> mylist; // 错误 因为list中有两个参数XCls<string, mlst> mylist;
}
Type Alias, noexcept, override, final
Type Alias
using func = void (*)(int, int);
//等价于
typedef void (*func)(int, int);
noexcept
void foo() noexcept(true){}// 不抛出异常
// move过程中不抛出异常,让程序放心。有move的时候程序有限调用move 而不是copy construct
MyString(MyString&& str) noexcept{}
MyString& operator=(MyString&& str) noexcept{}
override
帮助编译器检查是否为重写
final
class Base1 final{};// 没有人能继承Base1
virtural void f() final{};// 没有人能重写f()
decltype
获得变量类型
map<string, float> coll;
decltype(coll)::value_type elem;
// 相当于map<string, float>::value_type elem;Template<typename T1, typename T2>
auto add(T1 a, T2, b) -> decltype(a + b)
Lambdas
[&id]()mutable{++id;}// 才能改变id值
int tobefound = 5;
auto lambda1 = [tobefound](int val) {return val == tobefound; };
cout << lambda1(5) << " " << lambda1(10) << endl;
属于inline内联函数
Variadic Templates
递归
void func(){}
template<typename T, typename... Types>
void func(const T& firstArg, const Types& ...args){func(args...);
}
template<typename... Value>
class tuple{
public:size_t seed = 0;tuple(const Value&... args){tuple(seed, args...)}
};// 特化
template<>
class tuple<>{};template<typename Head, typename... Tail>
class tuple<Head, Tail...>:private tuple<Tail...>{typedef tuple<Tail...> inherited;
protect:Head m_head;
public:tuple(){};tuple(Head v, Tail... vtail):m_head(v), inherited(vtail){}// typename Head::type head(){return m_head};auto head()->decltype(m_head){return m_head};inherited& tail(){return* this;}
}
标准库
Rvalue reference
copy 和 move
insert(cons_iterator _position, const value_type& _x);
insert(cons_iterator _position, const value_type&& _x);
关键字 move forward才能完美转移
array forward_list
array数组 int a[10]; int* a = new int [10]
forward_list就是list改成单项列表
Hashtable
Hash function
tuple
tuple<int, float, string> t1(41, 6.3, "nice");
get<0>(t1); get<1>(t1); get<2>(t1);
auto t2 = make_tuple(41, 6.3, "nice");
get<1>(t1) = get<>(t2);
t1 = t2;
侯捷c++1114新标准相关推荐
- [侯捷 C++内存管理] 标准分配器实现
[侯捷 C++内存管理] 标准分配器实现 文章目录 [侯捷 C++内存管理] 标准分配器实现 VC6 标准分配器之实现 VC6 malloc() VC6 allocator BC5 标准库分配器之实现 ...
- 【侯捷】C++STL标准库与泛型编程(第二讲)
第二讲 应具备的基础 C++基本语法 模板(Template)基础 令你事半功倍 数据结构(Data Structures)和算法(Algorithms)概念 令你如鱼得水 书籍: <Algor ...
- 【侯捷】C++STL标准库与泛型编程(第三讲)
第三讲 算法的形式 C++标准库的算法,是什么东西? 说明: 算法Algorithm 是个 function template,标准库中的算法都长成如下这样: template<typename ...
- 【侯捷】C++STL标准库与泛型编程(第一讲)
前言 所谓Generic Programming(GP,泛型编程),就是使用 template(模板)为主要工具来编写程序.本课程第二讲开宗明义阐述了 GP 与 OOP(Object Oriented ...
- 【侯捷】C++STL标准库与泛型编程(第四讲)
第四讲 1.一个万用的Hash Function 说明: 1.1 针对自定义类型的哈希函数的编写方式 自定义类型: #include <functional> class Customer ...
- C++11新特性选讲 语言部分 侯捷
C++11新特性选讲 语言部分 侯捷 本课程分为两个部分:语言的部分和标准库的部分.只谈新特性,并且是选讲. 本文为语言部分笔记. 语言 Variadic Templates move semanti ...
- 侯捷C++八部曲笔记(四、C++2.0新特性)
侯捷C++八部曲笔记(四.C++2.0新特性) 关键字 noexcept override final decltype =default, =delete nullptr auto explicit ...
- 侯捷C++课程笔记03: STL标准库与泛型编程
本笔记根据侯捷老师的课程整理而来:STL标准库与泛型编程 pdf版本笔记的下载地址: 笔记03_STL标准库与泛型编程,排版更美观一点(访问密码:3834) 侯捷C++课程笔记03: STL标准库与泛 ...
- C++标准库(第2版)(侯捷译)PDF
C++标准库(第2版)(侯捷译)PDF下载地址: https://pan.baidu.com/s/1HmRjuUUTRF7_feyo3mXoAg 提取码: cnze 资源全部收集于互联网,分享目的仅供 ...
- 一、C++面向对象高级编程(上) (侯捷)
侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一.C++ 面向对象高级开发 1.C++面向对象高级编程(上) 2.C++面向对象高级编程(下) 二.STL 标准库和泛型编程 1.分配器 ...
最新文章
- 2021全球开放数据应用创新大赛开启,300万+奖金等你来拿!
- 带来高收入的三大竞争力技巧,可以涨到40W了!
- halcon旋转后坐标_基于FPGA的图像旋转设计
- PL/SQL复合数据类型
- 给公司的电脑配置theano
- java类、抽象类、接口的继承规则
- BUG(0):用某位表示特定属性
- macOS Monterey更新后遇到的bug问题汇总与解决
- 数字证书的基础知识(转)
- 超赞!设计师完全自学指南
- 如何撤回 Gmail 已发送的邮件
- 今生,只想做一个平凡的人
- Kotlin的协程:挂起函数
- python作者的诗_《全唐诗》Python文本分析
- 如何安装打印机驱动程序
- 使用shiro+aop实现权限控制
- js实现拼音模糊搜索
- 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)
- Web前端开发学习笔记(2)(css3新特性)
- linux 打开终端自动运行脚本.barshrc
热门文章
- 虚幻引擎4控制台变量和命令
- MacOS下解决宿主机和docker容器之间网络互通
- 记录一个非常实用的gif制作工具licecap
- 中央处理器cpu中的什么是计算机的指挥中,计算机中央处理器CPU的组成有哪些
- macos系统镜像iso_系统原装ISO镜像软碟通刻录启动U盘教程
- 基于AD9854个和MSP430的波形发生器
- NetGear stora 重置成功后,个人文件夹丢失的找回办法
- java 消息提醒_JAVA怎么样实现即时消息提醒
- 自动驾驶中的多传感器融合
- 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-20期...