
C++11新特性
文章平均质量分 81
C++11 14的语法新特性汇总
dailingGuo
这个作者很懒,什么都没留下…
展开
-
c++ push_back与emplace_back
push_back与emplace_back本节直接讨论在向容器添加数据时,插入(push_back、push_front、insert等)和置入(emplace_back)的内存性能情况,深入了解C++的内部机制。考虑下面代码:vector<string> vs;vs.push_back("abcd");push_back的两个版本:void push_back(const T& x);//左值void push_back(T&& x);//右值vs是原创 2021-04-15 13:51:20 · 1182 阅读 · 0 评论 -
C++2.0新特性——lambda表达式
lambda表达式一、概念1、lambda表达式:表达式的一种,是源代码的组成部分。常用于创建闭包并将其用作传递给函数的实参,例如:vector<int> vec={1,2,3};find_if(vec.begin(),vec.end(),[](int val){return 0<val && val<10;});第三个参数即为lambda表达式。2、闭包:闭包是lambda表达式创建的运行期对象,根据不同的捕获方式(按引用或值),闭包会持有数据的副本或原创 2021-04-14 20:10:48 · 419 阅读 · 0 评论 -
C++11新特性——右值引用、移动语义和完美转发
一、概念移动语义:使编译期使用移动操作来替换复制操作。如unique_ptr、future、thread。完美转发:使得人们可以撰写接受任意实参的函数模板,并将其转发到其他函数,目标函数会接受到与转发函数所接受的完全相同的实参。右值引用:将移动语义和完美转发胶合起来的底层语言特性。要点:函数形参总是左值,即使其类型为右值引用:void f(Widget&& w);w是个左值,即使定义为右值引用。二、move和forwardmove:无条件将实参强制转化为右值。实例实现如下:原创 2021-04-13 20:24:24 · 353 阅读 · 0 评论 -
C++ 2.0新特性——智能指针
智能指针一、裸指针与智能指针使用智能指针就是为了克服裸指针的一系列缺点:1、裸指针在声明中并没有指出指向的是单个对象还是一个数组。2、裸指针在声明中也没有提示在使用完指向的对象之后,是否需要析构它。即在声明中看不出指针是否拥有其指向的对象。3、即使知道指向的对象,也不可能知道怎样析构才是合适的。是调用delete还是放到专门的用于析构的函数里面。4、即使知道需要使用delete,匹配对像“delete”和数组“delete[]”也会存在未定义行为。5、上述都清除,要保证析构在所有代码路径上都执原创 2021-04-13 10:50:15 · 376 阅读 · 0 评论 -
C++ 2.0新特性——对象自动添加移动构造函数和移动赋值运算符
移动构造函数和移动赋值运算符一、特种函数特种函数:C++自行生成的成员函数。C++98的4个特种成员函数:默认构造函数(无参),析构函数、复制构造函数、复制赋值函数。特种函数都具有public访问层级,都是inline,非虚的。只有在类中没有声明任何对应的函数,编译期才会自动生成。class Widget {public: Widget();//默认构造函数 ~Widget(); //默认析构函数 Widget(const Widget& w); //默认复制构造函数 Wi原创 2021-04-09 17:28:23 · 516 阅读 · 0 评论 -
C++ 2.0新特性——关键字(nullptr、override、enum class)
C++ 2.0新特性——关键字一、nullptrnullptr不具备整型类型,实际类型为nullptr_t,可以隐式转化为所有的裸指针类型void f(int);void f(bool);void f(void*)f(0):调用f(int),而不是f(void*);f(null):可能编译无法通过,一般调用f(int)。不会调用f(void*)。f(nullptr):调用f(void*)1、相较于0或NULL,优先使用nullptr2、避免了在整型和指针之间重载,很好地区分了整型0和指原创 2021-04-09 16:39:59 · 265 阅读 · 0 评论 -
C++ 2.0新特性——大括号与小括号
C++ 2.0新特性——大括号与小括号变量创建区分() 和 {}1、大括号初始化可以应用的语境最为宽泛,可以阻止隐式窄化类型转换,若大括号内的表达式无法保证能够采用进行初始化的对象来表达,则代码无法编译通过。免疫C++的解析语法:任何能够解析为声明的都要解析为声明。double x,y,z;int sum1{x+y+z};//double 类型的和无法用int表达int sum2(x+y+z);int sum3=x+y+z;//都没问题,值由double隐式转化为intWidget w1原创 2021-04-08 16:30:03 · 2745 阅读 · 0 评论 -
C++ 2.0新特性——类型推导(auto、decltype)
C++ 2.0新特性——类型推导(auto、decltype)一、类型推导auto类型推导在大部分情况下就是模板类型推导,因此首先介绍模板类型的要点。1、在模板类型推导中,具有引用类别的实参会被当成非引用类型来处理,即引用性会被忽略。(类型为指针或引用)template<typename T>void f(const T& param)int x=10;const int cx=x;const int& rx=cx;定义3个变量x,cx,rx分别作为函数f的原创 2021-04-08 15:48:11 · 317 阅读 · 0 评论