当前位置: 首页 > news >正文

深圳盐田建设交易中心网站副国级人员名单

深圳盐田建设交易中心网站,副国级人员名单,宁波网站建设哪里便宜,免费安全网站认证移动构造和移动赋值生成条件移动构造和移动赋值调用逻辑强制生成默认函数的关键字default禁止生成默认函数的关键字delete 移动构造和移动赋值生成条件 C11中新增的移动构造函数和移动赋值函数的生成条件为#xff1a; 移动构造函数的生成条件#xff1a;没有自己实现的移动… 移动构造和移动赋值生成条件移动构造和移动赋值调用逻辑强制生成默认函数的关键字default禁止生成默认函数的关键字delete 移动构造和移动赋值生成条件 C11中新增的移动构造函数和移动赋值函数的生成条件为 移动构造函数的生成条件没有自己实现的移动构造函数并且没有自己实现的析构函数拷贝构造函数和拷贝赋值函数。移动赋值函数的生成条件没有自己实现的移动赋值函数并且没有自己实现的析构函数拷贝构造函数和拷贝赋值函数。 在这里移动构造和移动赋值并不是说没有写就会自动生成而是需要一定的条件支持下才会生成。 当我们实现了移动赋值函数和移动构造函数后编译器就不会自动生成拷贝构造和拷贝赋值了 移动构造和移动赋值调用逻辑 默认生成的移动构造和移动赋值做的什么赋值 默认生成的移动构造函数对于内置类型来说完成的为浅拷贝。如果存在自定义类型成员且实现了移动构造函数这时就会调用自定义类型成员的移动构造函数。默认生成的移动赋值函数对于内置类型来说完成的为浅拷贝。如果存在自定义类型成员且实现了移动赋值函数这时就会调用自定义类型成员的移动赋值函数。 下 面我们模拟实现以下其中包括自定义string类和person类 namespace test {class string{public://构造函数string(const char* str ){_size strlen(str); //初始时字符串大小设置为字符串长度_capacity _size; //初始时字符串容量设置为字符串长度_str new char[_capacity 1]; //为存储字符串开辟空间多开一个用于存放\0strcpy(_str, str); //将C字符串拷贝到已开好的空间}//交换两个对象的数据void swap(string s){//调用库里的swap::swap(_str, s._str); //交换两个对象的C字符串::swap(_size, s._size); //交换两个对象的大小::swap(_capacity, s._capacity); //交换两个对象的容量}//拷贝构造函数现代写法string(const string s):_str(nullptr), _size(0), _capacity(0){cout string(const string s) -- 深拷贝 endl;string tmp(s._str); //调用构造函数构造出一个C字符串为s._str的对象swap(tmp); //交换这两个对象}//移动构造string(string s):_str(nullptr), _size(0), _capacity(0){cout string(string s) -- 移动构造 endl;swap(s);}//拷贝赋值函数现代写法string operator(const string s){cout string operator(const string s) -- 深拷贝 endl;string tmp(s); //用s拷贝构造出对象tmpswap(tmp); //交换这两个对象return *this; //返回左值支持连续赋值}//移动赋值string operator(string s){cout string operator(string s) -- 移动赋值 endl;swap(s);return *this;}//析构函数~string(){//delete[] _str; //释放_str指向的空间_str nullptr; //及时置空防止非法访问_size 0; //大小置0_capacity 0; //容量置0}private:char* _str;size_t _size;size_t _capacity;};class Person{public://构造函数Person(const char* name , int age 0):_name(name), _age(age){}拷贝构造函数//Person(const Person p)// :_name(p._name)// , _age(p._age)//{}拷贝赋值函数//Person operator(const Person p)//{// if (this ! p)// {// _name p._name;// _age p._age;// }// return *this;//}析构函数//~Person()//{}private:test::string _name; //姓名int _age; //年龄};}从以上代码我们可以看出我们person类中只有一个构造函数这时是满足我们默认生成的条件的。 int main() {test::Person s1(张三, 21);test::Person s2 std::move(s1); //想要调用Person默认生成的移动构造return 0; }我们可以看出此时输出的为移动构造当我们将person类中的析构拷贝构造等复原的时候这时就不满足条件了也就调用的为深度拷贝了 强制生成默认函数的关键字default 在有一些条件下我们的默认构造总是默认生成失败为了解决这个问题C11推出了关键字default来强制将其生成。 class Person { public:Person() default; //强制生成默认构造函数//拷贝构造函数Person(const Person p):_name(p._name), _age(p._age){} private:cl::string _name; //姓名int _age; //年龄 };说明一下 默认成员函数都可以用default关键字强制生成包括移动构造和移动赋值。 禁止生成默认函数的关键字delete 当我们想要限制某些默认函数生成时可以通过如下两种方式 在C98中我们可以直接将函数设置为私有这样外部调用的时候就会直接报错。在C11中我们可以在函数声明的后面加上 delete表示让编译器不生成该函数的默认版本我们将delete修饰的函数称为删除函数。 class CopyBan { public:CopyBan(){} private:CopyBan(const CopyBan) delete;CopyBan operator(const CopyBan) delete; }; 说明一下 被delete修饰的函数可以设置为公有也可以设置为私有效果都一样。
http://www.w-s-a.com/news/914794/

相关文章:

  • 如何拿网站后台账号wordpress 电影下载站源码
  • 公司网站建设方案书安卓应用市场免费下载安装
  • phpmysql网站设计建设好一个网站需要
  • 自己做的网站能被别人看到吗idea怎么做网页
  • 燕莎网站建设互联网排名前十的公司2021
  • 微软云怎么做网站微商城和小程序区别
  • 哈尔滨建站的系统网站到首页排名
  • 运动网站开发的需求分析南通市住房和城乡建设局网站
  • 佘山做网站谷歌云做网站
  • 免费发布信息网站大全666做p2p网站费用
  • 北京 网站建设咨询顾问公司网络公司有几家
  • 设计类网站如何用ps做网站首页
  • 品牌网站建设的关键事项设计网有哪些
  • 网站没收录徐州建设工程审图中心网站
  • 网站建设记账做什么科目erp系统有哪些软件
  • 泰拳图片做网站用哪里有做空包网站的
  • 查外链网站重庆做网站微信的公司
  • 有没有外包活的网站如何做网站快捷键的元素
  • 公司网站赏析网站制作2019趋势
  • 企业进行网站建设的方式有( )推广引流违法吗
  • 按营销型网站要求重做网站 费用点金网站建设
  • 深圳做网站互联网服务
  • 网站sem托管wordpress安装无法连接数据库
  • 深圳网站建设开发公司哪家好微信小程序商家入口
  • 江门站排名优化建立什么网站赚钱
  • 科普文章在那个网站做招聘网站代做
  • 监控设备东莞网站建设游戏网站域名
  • 对商家而言网站建设的好处网址导航怎么彻底删除
  • app设计网站模板企业展厅策划设计公司有哪些
  • wordpress销售主题手机网站关键词优化