C++11新特性

C++11 主要新特性有类的初始化与函数、新增关键字、std库新特性、lambda表达式、智能指针、线程

1.关键字
)nullptr取代NULL、0
)constexpr:显式声明函数返回值、变量是一个常量表达式
)auto:对变量类型推导,
)decltype:对表达式类型推导,用法为decltype(表达式)
)using:声明使用的命名空间、代替typedef
)override:显式的告知编译器进行重载
)final :为了防止类被继续继承以及终止虚函数继续重载引入的
)default:使用编译器会自动生成的成员函数,如构造函数、拷贝构造函数、=操作符函数
)delete:显式指定不使用编译器会自动生成的成员函数,如构造函数、拷贝构造函数、=操作符函数
)enum class:定义枚举变量
)sizeof…运算符,变长参数传递使用
)noexepct显式声明函数不会抛出异常
(x)explicit显式指定编译不要进行隐式转换,一般修饰构造函数
(x)static_cast(编译时类型转换检查)、dynamic_cast (运行时类型转换检查) 、const_cast(去除const属性)、reinterpret(任意类型强转)
(x)mutable :const对象不能调用非const函数,mutable修饰的变量允许在const函数中修改变量

2.std库新特性
)std::begin和std::end函数
)引入c_begin和c_end成员函数,其返回值类型是const_iterator
)std::array静态数组类
)std::forward_list单向列表类
)std::initializer_lis初始化列表类
)shrink_to_fit释放空闲的空间成员函数(只用于std::vector、std::string、std::deque容器,vsomeip源码也有这样的操作)
)std::bind绑定函数(闭包函数,带状态函数)
)std::function可调用对象包装函数
)std::move移动函数(无条件强制转换为右值),为了减少拷贝动作
)std::forward转发函数(保持原始参数的左值或右值性,保证类型的不变性),配合模板万能引用&&使用,传递参数
)std::tuple多元素组合类,与std::pair类似,std::pair仅支持两个元素组合
)std::unordered_map/std::unordered_multimap哈希的键值对(无序)
(*)std::unordered_set/std::unordered_multiset只有key的集合(无序)

3.lambda表达式
格式
[捕捉列表] (参数列表) 关键字 ->返回类型{ 函数体;};
其中参数列表、返回类型、关键字可以省略。lambda表达式可以理解为匿名函数,但是是在运行时创建
最简单的lambda表达式:[]{};

[捕捉列表]:[]、[&]、[=]、[this]、[某变量名]、[& 某变量名]、[=,&某变量名]、 [&,=某变量名] ……,全局变量、局部静态变量默认捕捉可用
关键字:
mutable:可以修改按值传递进来的拷贝,注意不是值本身
exception:声明函数抛出的异常

4.智能指针
)共享指针std::shared_ptr与std::make_share
)独享指针std::unique_ptr (std::make_unique在C++11没有,C++14才加入)
)弱指针std::weak_ptr(用于辅助std::share_ptr工作,比较少用)
)继承std::enable_shared_from_this类, 可以在类内部安全唯一地指向自身,而不是多个指向this的std::shared_ptr指针
备注:
)std::shared_ptr的成员函数:use_count(引用个数)、unique(是否独占)、reset(重置,分为带参数,不带参数)、(解引用)、get(返回原始指针)、swap()交换指向的对象、=nullptr(引用计数减1,减到0对象析构)
)std::unique的成员函数:release(释放对象)、 reset(重置,分为带参数,不带参数)、 (解引用)、get(返回原始指针)、swap()交换指向的对象、 =nullptr(对象析构)
)std::unique可以转换为std::shared_ptr,可以直接赋值、std::move
)std::weak_ptr的成员函数: use_count( std::shared_ptr引用个数)、expired(对象是否不存在) 、 reset(重置,弱引用计数减1)、lock(返回std::shared_ptr) =nullptr(弱引用计数减1)

5.线程
)std::thread类创建线程
)std::mutex、std::timed_mutex、std::recursive_mutex与std::recursive_timed_mutex互斥量类
)std::lock_guard、std::unique_lock(提供更多细节方法,但更占空间,效率比前者差一点)配合std::mutex,离开作用域自动释放互斥量
)std::condition_variable条件变量类(有wait/notify_one/notify_all成员函数)
)std::this_thread::sleep_for(std::chrono::milliseconds(900));//还有sleep_until
)std::atomi原子操作类模板与std::memory_order(比较少用到)
)std::call_once只调用一次,配合std::once_flag变量使用。一般用在单例模式
)std::async与std::future、std::share_futrue
)std::packaged_task任务打包
)std::promise传入到线程,用于赋值。另一种方式获取值
6.其他
)使用{}、()对变量的初始化
)类的委托构造(一个构造函数调用另一个构造函数)
)变长参数模板
)类的仿函数
(*)类的构造函数使用初始化列表进行初始化

示例:

1.std::bind
在这里插入图片描述
2.std::function(vsomeip库路径test/malicious_data_tests/malicious_data_test_msg_sender.cpp)
在这里插入图片描述
3. lambda表达式,(vsomeip库路径implementation/routing/src/routing_manager_impl.cpp)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4. 智能指针
在这里插入图片描述
(vsomeip库路径implementation/routing/include/routing_manager_base.hpp)
在这里插入图片描述
在这里插入图片描述
5. 初始化
在这里插入图片描述
6.线程
在这里插入图片描述
在这里插入图片描述
源码参考:
https://github.com/jest549/cpp11_new_features
https://github.com/549jest/cpp11_new_features

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值