1.语言
2.标准库
语言
Variadic Templates
nullptr/auto
Uniform Initialization
在C++11之前,初始化可能发生在小括号 大括号 复制符号。
现在全部都可以使用大括号。
编译器看到{…},就做出一个initializer_list
explicit
1 | Complex c1(12, 5); |
左边编译器会隐式调用构造函数,变成复数加复数。右边会报错。
1 | #include <iostream> |
注释掉initializer_list的构造函数
不注释掉的结果
range based for
这个就见的很多了,注意for中也许有隐式的转换。
=delete =default
Alias Template
别名
1 | template <typename T> |
这个也使用的非常多,把容器包装一下,容器默认的是Alloc,通过这样去使用合适的分配器。
Template Template parameter
Type Alias/noexcept/override/final
Type Alias
类型的别名
//typedef void(func)(int, int);
using func = void()(int, int);
decltype
1 | map<string, float> coll; |
by using the new decltype keyword, you can let the compiler find out the type of an expression. This is the realization of the often requested typeof feature.
application: 1.declare return types 2.use it in metaprogramming 3.pass the type of a lambda
Lambdas
Variadic Templates
”一个和一包“
模板里变化的是模板参数,参数个数,参数类型,关键字”…“
递归调用,处理的都是参数。使用function templates
递归继承,处理的是类型。使用class templates
例:tuple
标准库
右值引用 Rvalue references
解决不必要的copy
Lvalue:可以出现在=左边
Rvalue:只能出现在=右边
1 | int a = 1; |
Perfect Forwarding
容器array
容器hashtable
- Post link: https://github.com/TheBge/TheBge.github.io/2021/02/06/%E4%BE%AF%E6%8D%B7C++2.0%E6%96%B0%E7%89%B9%E6%80%A7/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub IssuesGitHub Discussions