首页 > 编程语言 >C++11新特性

C++11新特性

时间:2024-09-05 10:53:30浏览次数:6  
标签:11 std 函数 特性 C++ shared 指针 ptr 构造函数

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

标签:11,std,函数,特性,C++,shared,指针,ptr,构造函数
From: https://blog.csdn.net/qq_37607695/article/details/141786629

相关文章

  • C++高精度乘法
    #include<iostream>#include<string>#include<cstring>usingnamespacestd;intmain(){stringstr1,str2;cin>>str1>>str2; //确定字符串长度 intlen1=str1.length(); intlen2=str2.length(); //确认积......
  • Vue 3.5 新特性
    一、useTemplateRef()ref()替代者引入useTemplateRef(),进一步简化了模板引用的使用,之前模板引用的方式是使用ref(),现在可以使用该API<scriptsetup>import{onMounted,useTemplateRef}from"vue";constaaaa=useTemplateRef("div");//参数绑定DOM元素上的ref......
  • 用Python实现时间序列模型实战——Day 11: 指数平滑模型
    一、学习内容1.简单指数平滑法简单指数平滑法:简单指数平滑法(SimpleExponentialSmoothing,SES)是一种用于平滑时间序列数据的技术,通过对数据赋予不同的指数权重,较新的数据点权重更高。SES适用于平稳的时间序列数据,即没有显著趋势和季节性成分的时间序列。SES模型的......
  • 编译原理项目——C++实现C语言编译器输出为gcc级汇编(代码/报告材料)
    完整的代码材料见文章末尾以下为核心内容和部分结果项目介绍function.cpp实现了共有的函数lexer.cpp词法分析器get_predict_table.cpp获取预测分析表LR.cpp语法分析generate.cpp语义分析中间代码生成to_asm.cpp目标代码生成部分核心代码LR分析#include"co......
  • BUSFIN 711 – FINANCIAL ANALYTICS APPLICATIONS
    BUSFIN711–FINANCIALANALYTICSAPPLICATIONSAssignment3:ProjectDUE:4PM,FRIDAY6SEP2024GeneralThisisanindividualassignment.Theassignmentismarkedoutof100marksandworth40%ofyouroverallgradeforthiscourse.Pleasesubmitonl......
  • 【C++】封装
    目录1.访问控制符2.封装的目的2.1.数据隐藏和保护2.2.接口与实现的分离2.3.控制访问3.封装的好处3.1.提高代码的安全性3.2.减少错误3.3.提高代码的可维护性3.4.增强代码的可读性3.5.促进模块化设计3.6.提高代码的可重用性3.7.支持面向对象的设计原则......
  • VScode「配置自动代码格式化C/C++」
    前言        你好,我是小莱,希望输出高质量的内容。        在大厂实习的过程中,我发现很多资深的开发者都习惯自己敲空格,按照公司的代码规范使用标尺来提示自己什么时候该换行。也许这样做可以增加代码编辑时的灵活性,但对于新入职场(用惯了VS)的小白来说,无疑大......
  • 《C++中的反射机制:开启高级编程之门》
    一、引言在现代编程中,反射机制是一种强大的工具,它允许程序在运行时检查和操作对象的结构和行为。虽然C++语言本身并没有内置的反射机制,但通过一些技巧和技术,我们可以在C++中实现类似的功能。本文将深入探讨如何在C++中实现反射机制,以及它在实际编程中的应用。二、什么......
  • 《C++中的移动构造函数与移动赋值运算符:高效编程的利器》
    一、引言在C++编程中,随着现代软件对性能要求的不断提高,高效地管理资源变得至关重要。C++11引入了移动语义,其中移动构造函数和移动赋值运算符成为了提高程序性能和资源管理效率的重要工具。本文将深入探讨C++中的移动构造函数和移动赋值运算符的作用,以及它们在实际编程中......
  • Win32 C++代码快速验证模板
    DLL模板#include<windows.h>#include<algorithm>#include<array>#include<cstdio>#include<cstdlib>#include<cstring>#include<deque>#include<iostream>#include<list>#include<map>#incl......