C++11/14/17一些好用新特性自己整理下

慢慢手写,不对的地方还请指正。

1.override:子类继承父类的时候,子类虚函数名字写错了或者参数列表不匹配会变成另外一个函数编译器无法判断对错,和你写不写virtual也没关系,这时候可以在虚函数结尾加上override关键字,这时编译器就可以查找父类是否有这个虚函数并检查名字和参数列表,不匹配报错。

2.=default:   构造函数、析构函数、拷贝构造函数、operator =加这个编译器会给出一个默认实现,个人没发现有什么特别的作用,可能就是为了代码整洁。、

3.=delete: 和上面default相对应防止编译器生成相对应的默认函数,自己写的一些类由于特殊原因需要这些函数中的一个或者多个可以使用该关键字禁用。

4.auto:一般用于编译器判定变量类型,个人在项目中用的场景不多,唯一多的就是推断迭代器类型。

5.for-each: 不再像之前一样用自增的变量遍历一个容器或者数组也不用for(auto it!=XX.begin(),it!=XX.end(),it++) 。直接for(auto it:容器或数组名) 这里要注意,修改原始容器或数组的话不能用上面那句话 auto it只是原始数据的拷贝,可写成r(auto &it:容器或数组名)引用的形式,效率也高点。

6.std::tuple : 我们在某代码中需要设置某个结构体存容器的返回值结构体可能包含很多类型,此时我们可以使用tuple<类型名1,类型名2,类型名3.......>name("212",3,"32"....)直接初始化,代码大大简化了。

7.std::thread:这个要讲东西太多了,自己找大佬博客学吧 自己做几个demo,mutex,条件变量,信号量,各种锁模拟各种场景自己实践去吧。注意下生命周期和分离的一些问题。

8.std::atomic:保证原子操作,多线程不会存在竞态,可以不加锁,还有一系列提供的相对应的接口。

9.智能指针:之前我觉得无所谓new和delete配对合理就行,读了陈老师的《多线程服务端编程》后知道线程安全的类有的时候必须要用智能指针,现代c++也极力支持智能指针,而非delete,所以我项目都是尽可能使用了,也有一些陷阱需要注意。 一般状况,如果你的指针不需要共享出去,那么应该使用 std::unique_ptr,反之使用 std::shared_ptr,当然这是在该智能指针需要管理资源的生命周期的情况下;如果不需要管理对象的生命周期,可以用 std::weak_ptr

猜你喜欢

转载自blog.csdn.net/qq_36533978/article/details/107204707