C++ new features 标准库 和 语言 — 小点点

1. 头文件写法变化

c++ 标准库头文件不带 .h,#include<vector>
c 新式也不带.h, #include<cstdio>

2. Spaces in Template Expressions

新特性去掉了"< > >"之间的空格,—> "< >>"
在这里插入图片描述

3. nullptr、0、NULL

在这里插入图片描述

// nullptr的意思告诉编译器传递的是 空指针
void f(int) { cout << "f(int)\n"; }
void f(void*) { cout << "f(void*)\n"; }

int main()
{
    f(0);       // f(int)
    f(nullptr); // f(void*)

    return 0;
}

4. auto

在这里插入图片描述自动推断变量类型
编译器本来就知道变量的类型. 完成自动推断当然可以.

auto it; // error 这是在调戏编译器,鬼知道你要什么类型

一般用于类型名很长,很复杂的情况.

vector<string>::iterator it = v.begin();
				|
				V
		auto it = v.begin();

5. Uniform Initialization(一致性初始化)

在这里插入图片描述
“{ }”背后就是形成了initializer_list<T>.
背后是这个类initializer_list<T>在发挥作用

6. range-based for statement

在这里插入图片描述
有的容器不能通过迭代器改变元素, 关联式容器( set map multiset multimap hashset hashmap)都不可以.
在这里插入图片描述
一个容器的迭代器实现,一个通过全局函数begin(), end().

7. noexcept

满足条件下保证函数不丢异常, 默认条件为真(不丢异常)。
vectordeque调用构造函数时,必须保证构造函数不丢异常。在memory relocation时,只在vectordeque中存在, grow move &&跟搬移有关。
在这里插入图片描述
在这里插入图片描述

8. override

在重写虚函数时,函数签名肯定要相同,否则不叫override。
为防止出现程序员 想重写但是失误导致了签名不同,于是2.0提供了新的关键字override,告诉编译器我想重写,你帮我检查签名有没有问题。
在这里插入图片描述

9. final

  1. 针对类: 父类的终极设计者,不要继承这个类,加上final
  2. 针对虚函数: 继承了一个类,不能重写那个被final的虚函数。
    在这里插入图片描述

10. decltype

通过decltype可以获取对象的类型。
在这里插入图片描述

vector<int> v;  // 在很远的地方定义了一个v

// 以下两句一个意思
decltype(v)::value_type a; // 先获取v的类型名,再使用它的value_type,这里就是int了
int a;
map<string, int> map1;
// `key_type`就表示map中`key`的类型。以下三句是一个意思:
map<string, int>::key_type m;
string m;
decltype(map1)::key_type m;

decltype对应有三种用法
在这里插入图片描述

10.1 用于函数返回值

在这里插入图片描述
函数返回类型的指定方式 的写法

template<typename T1, typename T2>
auto add(T1x, T2 y) ->decltype(x+y);
10.2 在类中使用

取个别名,在编译器编译到这一句时,并不知道obj的类型,所以前面要加typename
当然要说明obj对象肯定要包含有iterator否则用的时候可能会出问题。

typedef typename decltype(obj)::iterator iType;

在这里插入图片描述

10.3 用于lambda

后面一堆函数要用cmp这个对象来表现,一般很少也很难写出lambda表达式的类型。可以用decltype来获取它的类型。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值