一、=default,=delete

1、首先我们要回顾一下类默认函数的概念:

  • C++中,当我们设计与编写一个类时,若不显著申明,则类会默认为我们提供如下几个函数:

(1)构造函数(A())、(2)析构函数(~A())、(3)拷贝构造函数(A(A&))、(4)拷贝赋值函数(A& operator=(A&))、(5)移动构造函数(A(A&&))、(6)移动赋值函数(A& operator=(A&&))

注意:拷贝函数如果涉及指针就要区分浅拷贝(指针只占4字节,浅拷贝只把指针所占的那4个字节拷贝过去)和深拷贝(不仅要拷贝指针所占的字节,还要把指针所指的东西也要拷贝过去);

  • 以及全局的默认操作符函数

(1)operator,(2)operator &,(3)operator &&,(4)operator *,(5)operator->,(6)operator->*,(7)operator new,(8)operator delete。

2、何时需要自定义big—three(构造函数、拷贝构造、拷贝赋值)/big-five(新增移动构造函数、移动赋值函数)

  如果类中带有point member(指针成员),那我们就可以断定必须要给出big-three,如果不带,绝大多与情况下就不必给出big-three,用默认的就好。

3、关键字使用示例

  1. 如下图所示,分别是构造函数、拷贝构造函数、移动构造函数(Zoo&&表示得是右值引用)、赋值函数、移动赋值函数等5种成员函数,default和delete基本就作用再这5种函数上,由于c++中,如果你自定义了这5种函数,编译器就不会再为你生成默认的相关函数,但是如果我们再后边加上=default关键字,就可以重新获得并使用编译器为我们生成的默认函数(显式缺省:告知编译器即使自己定义了也要生成函数默认的缺省版本));
  2. =delete相对于上面来说则是相反的,=delete表示不要这个函数,就是说这个函数已经删除了不能用了,一旦别人使用就会报错(显式删除:告知编译器不生成函数默认的缺省版本),引进这两种新特性的目的是为了增强对“类默认函数的控制”,从而让程序员更加精准地去控制默认版本的函数。
  3. 关键字的使用

二、alias(别名、化名)

1、using在2.0有了新的意义,用来表示别名化的语法

  用using声明别名化,且这个别名化是可以带参数的,同样具有别名化意思的还有define(也可以带参数),typedef(不能带参数),但它们在特殊时候都无法代替using,但是不能对别名化的名称做特化或偏特化,只能对原名做(化名不能代替本尊)。

2、所有using的使用情况归类

三、noexcept

  noexcept用于申明函数保证不会抛出异常,后面可以跟一个括号写一个条件,也就是说在某种条件满足情况下,不会抛出异常,一般异常处理流程:当程序发生异常时会将异常信息上报返回给调用者,如果有异常处理则处理,如果该调用者没有处理异常则会接着上报上一层,若到了最上层都没有处理,就会调用std::terminate()->std::abort(),然后终止程序。

四、override

  override用于明确要重写父类的虚函数上,相当于告诉编译器这个函数就是要重写父类虚函数这样一个意图,让编译器帮忙检查,而没有这个关键字,编译器是不会帮你检查的

五、final

  final新增两种功能:(1)、禁止基类被继承,(2)、禁止虚函数被重写;

六、const

  该部分参考转载:https://blog.csdn.net/u011327981/article/details/77656866

  这是个人新的总结,非语法部分,目的是为了对比以上final和override.

  • 在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误

  • 只有被声明为const的成员函数才能被一个const类对象调用

  • 若成员成员函数声明为const,则该函数不允许修改类的数据成员

在上面成员函数的定义中,ok()的定义是合法的,error()的定义则非法。

C++2.0新特性(三)——<=default,=delete、alias(别名)、noexcept、override、final、以及和const对比>的更多相关文章

  1. C# 6.0 新特性 (三)

    主构造函数 自动属性初始化表达式尤其适合与主构造函数结合使用.主构造函数为降低常见对象模式的繁琐程度提供了一种方法.此功能自五月以来已显著改进.更新包括: 主构造函数的可选实现主体:这将支持此前不受支 ...

  2. Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)

    1.   Annotation注解 1.1.  Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annota ...

  3. 【mysql】mysq8.0新特性

    一.MySQL8.0简介   mysql8.0现在已经发布,2016-09-12第一个DM(development milestone)版本8.0.0发布.新的版本带来很多新功能和新特性,对性能也得到 ...

  4. MySQL 8.0 新特性梳理汇总

    一 历史版本发布回顾 从上图可以看出,基本遵循 5+3+3 模式 5---GA发布后,5年 就停止通用常规的更新了(功能不再更新了): 3---企业版的,+3年功能不再更新了: 3 ---完全停止更新 ...

  5. C# 7.0 新特性3: 模式匹配

    本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...

  6. C#发展历程以及C#6.0新特性

    一.C#发展历程 下图是自己整理列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的. 二.C#6.0新特性 1.字符串插值 (String In ...

  7. 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性

    原文:返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性 [索引页][源码下载] 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性 ...

  8. ASP.NET4.0新特性

    原文:ASP.NET4.0新特性 在以前试用VS2010的时候已经关注到它在Web开发支持上的一些变化了,为此我还专门做了一个ppt,当初是计划在4月12日那天讲的,结果因为莫名其妙的原因导致没有语音 ...

  9. ASP.NET Web API 2.0新特性:Attribute Routing1

    ASP.NET Web API 2.0新特性:Attribute Routing[上篇] 对于一个针对ASP.NET Web API的调用请求来说,请求的URL和对应的HTTP方法的组合最终决定了目标 ...

随机推荐

  1. day05——字典

    day05 字典 字典-- dict: 字典无序的,可变的数据类型 用于存储大量数据,字典要比列表快,将数据和数据之间进行关联 lst1 = ['常鑫','李文虎','张宇'] # 姓名 lst2 = ...

  2. [转] Nginx配置性能优化

    大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了.而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...

  3. 「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 上)

    大家好,今天的内容,我将和大家一起聊聊 Vue 路由相关的知识,如果你以前做过服务端相关的开发,那你一定会对程序的URL结构有所了解,我没记错的话也是路由映射的概念,需要进行配置. 其实前端这些框架的 ...

  4. python2.7 与python3.X区别

    1,print("中文") python2.7,会报错  原因:py2.7用ascll码 解决:2.7头部加入并保存的文件用utf-8编码 # -*- coding: utf-8 ...

  5. 数据库系列(五)之 mysql的伸缩性

    这篇文章,主要讲述mysql的伸缩性.在国内mysql一直都是使用得最多的数据库,在国外也排名前三.mysql是一款开源的.性能较高的数据库. 伸缩性是指在软件设计中,软件(数据库.应用程序)通过特定 ...

  6. 01. JavaScript基础总结深入

    01. 数据类型 1. 分类(2大类) * 基本(值)类型 * Number: 任意数值 * String: 任意文本 * Boolean: true/false * undefined: undef ...

  7. windows下搭建vue+webpack的开发环境

    1. 安装git其右键git bash here定位比cmd的命令行要准确,接下来的命令都是利用git bash here.2. 安装node.js一般利用vue创建项目是要搭配webpack项目构建 ...

  8. 英语lasurite青金石lasurite单词

    lasurite青金石的蓝色,是希望的颜色. 医药功效:青金石可入药,是世界公认的.青金即青金石,是一种不透明或半透明的蓝色.蓝紫色或蓝绿色的准宝石,主要由天蓝石和方解石组成.青金石色是藏传佛教中药师 ...

  9. Fortify漏洞之Portability Flaw: File Separator 和 Poor Error Handling: Return Inside Finally

    继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: File Separator 和  Poor Error Handling: Return Inside Fina ...

  10. 实验吧简单的sql注入3

    今天早上起来发现有人评论说我没更新实验吧sql注入3,主要是因为前段时间都去做bugku去了 但是重做这道题发现以前的姿势不行了,exp()报错不再溢出,现在不能用这个姿势,所以这里重新整理了一遍思路 ...