代码中经常使用到的几点c++标准新特性

本文概述了C++11及以后版本引入的关键特性,包括nullptr替代NULL,auto类型推导,enum class增强安全性,区间迭代,初始化列表,using替代typedef,std::unordered_map和std::unordered_set的哈希表实现,以及override和final关键字的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中经常被使用的几点c++标准新特性,现罗列如下:
・指针NULL替换为nullptr。
・类型推导auto 。
例:auto x= 5; // x 被推导为 int auto arrX = new auto(10); // arrX 被推导为 int * auto y = 5L; // y 被推导为Long auto arrY = new auto(10L); // arrY 被推导为 long*
从 C++14 开始可以直接让普通函数具备返回值推导,如下面的写法变得合法:
template<typename T, typename U> auto add(T x, U y) { return x+y; }
・enum class代替了c++03的enum,更安全。
・区间迭代。例:for(const auto& i : arr){}
・初始化列表。
对类对象的初始化,例:A a {1, 1.1};
对容器的初始化,例:std::vector v = {1, 2, 3, 4};
・using取代typedef。
例如:

            typedef double db; //C99
            —->  using db = double; //c++11
           typedef void(*function)(int, int);//c99,函数指针类型定义
           —–>  using function = void(*)(int, int);//c++11,函数指针类型定义

・std::unordered_map
std::unordered_map与std::map用法基本差不多,但STL在内部实现上有很大不同, std::map使用的数据结构为二叉树,而std::unordered_map内部是哈希表的实现方式,哈希map理论上查找效率为O(1)。但在存储效率上,哈希map需要增加哈希表的内存开销。
・std::unordered_set
std::unordered_set的数据存储结构也是哈希表的方式结构。
std::unordered_set在插入时不会自动排序,这是std::set表现不同的地方。
・override和final。
作用于虚函数,更多的作用是:显式的标识是否应该多态继承。
多态继承:子类的虚函数多态实现要加override显式的表明;
不用多态继承:不让子类多态实现的虚函数要记得加入final。
final 例・
//this is means no class can be derived from CPoint2D
class CPoint2D final {
//No class can override Draw
virtual void Draw() final;
};
如果一个函数有多个返回路径,那么每个返回路径返回的值需要具有相同的类型。
・直接lambda表达式。

Lambda 表达式,实际上就是提供了一个类似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的。
  例如在std::sort()中使用的代码如下:
  std::vector<CPoint2D> Pts{ {1,1},{3,3},{2,2} };
  std::sort(begin(Pts), end(Pts), [](const CPoint2D& pt1, const CPoint2D& pt2) { return pt1.x < pt2.x; });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值