c++ 11新特性”=违约”,“=删除”怎么用

  介绍

这篇文章主要介绍了c++ 11新特性”=违约”,“=删除”怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

1,默认=和=删除概述

任何事物的出现都必然有着其出现的理由,伴随着每一个新的概念产生都会带来一系列的便利和价值C + +在不断的演变与发展,与此同时,伴随着许多新的特性和功能产生。=默认=删除是C + + 11的新特性,分别为:显式缺省(告知编译器生成函数默认的缺省版本)和显式删除(告知编译器不生成函数默认的缺省版本). C + + 11中引进这两种新特性的目的是为了增强对“类默认函数的控制”,从而让程序员更加精准地去控制默认版本的函数。其具体的功能和使用方法下面将一一道来。

2,类与默认函数

在讲解关键字默认和删除之前,先对类和类的默认函数作下描述与说明,从而加深对这两个关键字的理解与认知。既要知其然,也要知其所以然C + +中,当我们设计与编写一个类时,若不显著写明,则类会默认为我们提供如下几个函数:

(1)构造函数
(2)析构函数
(3)拷贝构造函数
(4)拷贝赋值函数(操作符=)
(5)移动构造函数
以及全局的默认操作符函数:
(1)算子,
(2)操作符,
(3)操作符,,
(4)操作员*
(5)→
(6)运营商→*
(7)运营商新
(8)操作符删除

注:若我们在类中实现了这些版本之后,编译器便不会生成其对应的默认函数版本,这时需要我们显式的写上其对应的默认函数版本。

如例1所示:

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *   ,* File 名称:Student.cpp   *大敌;作者:,,,,,回答   ,*功能:,,Other ,,,,,,,   ,*邮件:,,,,,,2412799512 @qq.com    ,* Created 时间:,2018年07月17日,星期二,23时08分20秒   ,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */# include   using  namespace 性传播疾病;   class 学生   {   公众:   ,,,的学生(const  int  const  int  b)   ,,,,,,,:m_a (a)   ,,,,,,,,m_b (b)   ,,,{      ,,,}      int 木屐()const {return  m_a;}   int  getB进行排队()const {return  m_b;}   私人:   int  m_a;   int  m_b;   };      int 主要(int 命令行参数个数,char  * * argv)   {   Student 斯图(1、2);   cout<& lt; stu.getA () & lt; & lt; endl;//1   cout<& lt; stu.getB () & lt; & lt; endl;//2      ,,,Student  stu1;,,,,,,,,,,,//编译失败,报错:,no  matching  function  for  call 用的学生:学生()& # 39;      return  0;   }

编译方式:g++ Student.cpp

编译报错,提示:学生。cpp:函数的int主要(int、char * *) & # 39;:
学生。cpp: 34:13:错误:没有匹配的函数调用的学生:学生()& # 39;学生stu1
,

例1定义了一个对象stu1,该对象将会使学生用类的无参构造函数,而该默认构造函数学生在类中,我们没有显式的说明。因此,c++编译器在我们提供了该函数实现之后是不会生成与之对应的默认函数版本的。在学生中我们重载了带2个参数的构造函数,但是无参的构造函数,没有提供,因此会报错。

解决方式是:在该类中显式的提供无参构造函数,如下:

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *   ,* File 名称:Student.cpp   *大敌;作者:,,,,,回答   ,*功能:,,Other ,,,,,,,   ,*邮件:,,,,,,2412799512 @qq.com    ,* Created 时间:,2018年07月17日,星期二,23时08分20秒   ,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */# include   using  namespace 性传播疾病;   class 学生   {   公众:   ,,,学生(){},,,//显式说明学生的无参构造函数   ,,,的学生(const  int  const  int  b)   ,,,,,,,:m_a (a)   ,,,,,,,,m_b (b)   ,,,{      ,,,}      int 木屐()const {return  m_a;}   int  getB进行排队()const {return  m_b;}   私人:   int  m_a;   int  m_b;   };      int 主要(int 命令行参数个数,char  * * argv)   {   Student 斯图(1、2);   cout

c++ 11新特性”=违约”,“=删除”怎么用