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

广州建网站兴田德润可信建设医院在哪里

广州建网站兴田德润可信,建设医院在哪里,18种禁用软件黄app入口,广西人才网官方网站构造函数和初始化列表的性能差距对比测试 1.说明 在C类和对象中#xff0c;你可能听到过更加推荐用初始化列表来初始化类内成员。如果类内成员是自定义类型#xff0c;则只能在初始化列表中调用自定义类型的构造函数。 但初始化列表和在构造函数体内直接赋值有无性能差距呢…构造函数和初始化列表的性能差距对比测试 1.说明 在C类和对象中你可能听到过更加推荐用初始化列表来初始化类内成员。如果类内成员是自定义类型则只能在初始化列表中调用自定义类型的构造函数。 但初始化列表和在构造函数体内直接赋值有无性能差距呢今天就用一份相对简单的代码来测试一下 2.测试 2.1 代码说明 首先是一个自定义类型实现带缺省值的默认构造拷贝构造和赋值重载这三个函数并在内部新增打印来区分不同的函数 struct mytest { public:mytest(int a -1){_a a;cout mytest() a endl;}mytest(const mytest st) {_a st._a;cout mytest(copy) st._a endl;}mytest operator(const mytest st){_a st._a;cout mytest operator st._a endl;return *this;} private:int _a; };再在另外一个类中使用这个自定义类型 struct myclass { public:myclass(const struct mytest st, int b){cout myclass() _b: _b endl;}struct mytest _sa;int _b; };此时构造函数就有两种写法一种是在初始化列表中初始化这个自定义类型 myclass(const struct mytest st, int b):_sa(st),_b(b){cout myclass() _b: _b endl;}另外一种是在构造函数体内通过赋值重载来初始化这个自定义类型 myclass(const struct mytest st, int b){_sa st;_b b;cout myclass() _b: _b endl;}需要注意的是这里的自定义类型传参采用了引用传参并不会因此产生额外的拷贝 主函数体如下为了区分第一个mytest的构造函数我在其后新增了一行输出作为分割 int main() {mytest test_a(1);cout ------ endl;myclass test(test_a, 3);return 0; }2.2 测试 先来看看使用赋值初始化的方式可以看到虽然我们在初始化列表中什么都没有写但是这里依旧调用了默认的构造函数因为默认构造函数的缺省值给的是-1这里能通过参数判断出来这并不是我们显式调用的构造 调用了默认构造后又通过赋值重载来初始化了一遍_sa相当于两次初始化 但如果调用初始化列表则只会有一次拷贝构造避免了额外的默认构造调用 在linux下也测试过了结果和VS2019相同 3.结论 结论就出来了初始化列表能节省一次默认构造的调用优化性能 3.1 实际场景 在上面的场景中性能差距可能并不会特别大但是在下面的场景中可能就不一样了 struct mytest { public:mytest(int sz 1){_str new char[sz];_sz sz;cout mytest() sz endl;}mytest(const mytest st) {delete _str;// 需要先销毁原视的数据_str new char[st._sz]; // 再创建一个新的_sz st._sz;//省略拷贝数据的代码cout mytest(copy) st._sz endl;}mytest operator(const mytest st){delete _str;// 需要先销毁原视的数据_str new char[st._sz]; // 再创建一个新的//省略拷贝数据的代码cout mytest operator st._sz endl;return *this;} private:char* _str;size_t _sz; };struct myclass { public:myclass(const struct mytest st, int b):_sa(st),_b(b){//_sa st;//_b b;cout myclass() _b: _b endl;}struct mytest _sa;int _b; };在这个场景中因为mytest自定义类型的拷贝构造涉及到了深拷贝此时就需要将已有的空间给销毁了再new一片新的空间出来再将数据给拷贝过去。 白白多了一层默认构造中的new空间的拷贝构造中delete原有空间的消耗 如果类中需要深拷贝的成员不止一个那性能差距就更大 所以在C中一律以初始化列表优先 这里顺带提一嘴初始化列表的小坑也算是复习 当你使用初始化列表来初始化类内成员的时候初始化的顺序是类内成员声明的顺序而不是初始化列表中的顺序这点非常重要如果顺序不对可能会出现使用未定义还没有初始化完成的参数的bug
http://www.hkea.cn/news/14305666/

相关文章:

  • 海口网站建设联系方式企业文化培训都有哪些内容
  • 家居网站建设 百度文库家装装饰设计
  • c 开发微网站开发网页设计制作作品
  • asp怎么做网站广州网站建设开发设计
  • 网站上的招牌图怎么做小程序源码php
  • 做网站违反广告法手机代理ip免费网址
  • 松江品划网站建设推广优化品牌seo关键词
  • 哈尔滨网站建设公司简单的wordpress模板下载
  • 项目定制开发网站网站开发职业环境分析
  • 看守所加强自身网站建设工作总结莘县做网站
  • 做网站还要买服务器吗旅游网站开发的背景及意义
  • 门户网站安全建设wordpress调取多个分类文章
  • 重庆建设医院官方网站视频直播软件有哪些
  • 做陶瓷公司网站vue做门户网站
  • 在哪人网站要以接it项目做2021深圳装修公司排名前十强
  • 个人做电影网站服务器放国外安全吗怎么才能创个网站
  • 简述网站建设和推广评价指标怎么提交网站
  • 石家庄网站建设团队西安专业网络推广平台
  • 在服务器网站上做跳转页面跳转页面免费软件的定义
  • 民营医院建设网站搭建网页游戏多少钱
  • 网站建设价格标准杭州全案推广
  • 不同用户入口的网站样板iis 无法访问此网站
  • 适用于建设微型网站个人可以备案什么网站
  • 企业网站营销推广方案如何外贸营销推广
  • 网站推广的软件大学生网页设计期末作业
  • 才艺多网站建设平台手机版网站怎样做推广
  • wordpress教程 微信为网站做seo需要什么软件
  • 网站后台如何上传文件构建一个商务网站的步骤有哪些
  • 建设个人技术网站济南网站定制
  • 销售网站模板韩国电视剧