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

网站设计与建设公司做App和网站 聚马

网站设计与建设公司,做App和网站 聚马,室内设计说明500字简约,分布式移动网站开发技术从今天开始看《effective c》这本书#xff0c;把学到的东西当做笔记记下来#xff0c;算是督促自己学习吧#xff0c;也算是和大家一起分享一点东西#xff0c;理解不当的地方#xff0c;请谅解。#xff08;每天更新三个条款#xff09;。 一#xff1a;让自己习惯C…从今天开始看《effective c》这本书把学到的东西当做笔记记下来算是督促自己学习吧也算是和大家一起分享一点东西理解不当的地方请谅解。每天更新三个条款。 一让自己习惯C 条款1视C为一个语言联邦   条款2尽量以constenuminline替换#define   条款3尽可能使用const   条款4确定对象被使用前已先被初始化 二构造/析构/赋值运算 条款5了解C默默编写并调用哪些函数   条款6若不想使用编译器自动生成的函数就该明确拒绝   条款7为多态基类声明virtual析构函数   条款8别让异常逃离析构函数   条款9绝不在构造和析构过程中调用virtual函数   条款10令operator返回一个reference to *this   条款11在operator中处理“自我赋值”   条款12复制对象时勿忘其每一个成分 条款1视C为一个语言联邦 主要内容 1、这个条款主要说把C看做多个次语言的联邦包含Cobject-Oriented CTemplate CSTL。视情况而定用哪一部分。 ps可能就像我写C就是套着类的框写面向过程编程代码~ 条款2尽量以constenuminline替换#define 主要内容 1、宏定义的常量通常在预处理时期就被替换了所以如果报错的话可能很难追踪到错误点用const常量定义会比较好. 2、const替换宏定义有两点需要注意   1定义常量指针的时候需要指针和指针所指内容都是const所以用const string比较好。   2想要为某个类定义一个专属的常量这时候用宏定义就不太行了因为宏定义了之后整个文件后面都可以用除非#define #undefine限制这时候用const常量比较好。 3、假如定义一个const常量作为类的专属常量这时候类里面有个数组需要const常量作为其下标有的编译器可能没办法直接声明const常量的时候定义给于初值必须在类外去定义初始化。这时候就可以用enum代替const常量。 4、宏也可用来定义函数它没有函数调用的额外开销直接是在预处理期间被替换了但是宏函数也有副作用这时候用inline去替换宏函数比较好。 条款3尽可能使用const 主要内容 1、const可以作用于对象以及函数各个部分能用const的地方尽量用const防止不小心导致的错误更改。 2、const修饰成员函数成员函数可以进行重载为const和非const成员函数。   调用关系   1const对象可以调用const成员函数不可以调用非const成员函数而非const对象可以调用const和非const成员函数。    2const成员函数只能调用const成员函数而非const成员函数可以调用非const成员函数和const成员函数。 3、bitwise constness和logical constness。   1bitwise constness认为只要成员函数是const修饰的那么里面的任何bit都不能修改。不过假如一个类里面有一个char*类型的指针我们不能修改指针但是我们可以修改指针所指物。   2logical constness认为成员函数是const修饰的那么里面的某些bit是可以修改的。比如上述3-1例子还比如我们有一个类里面某些成员我们是可以通过mutable进行修饰达到修改其的意图。 4、const和non-const成员函数避免重复。     成员函数有const和非const如果里面做的事情一样会造成代码冗余解决方法就是通过非const成员函数调用const成员函数类似于这样const_castchar(static_castconst T(*this)[pos]);也就是说先将对象转为const类型调用const成员函数因为非const成员函数要返回是非const的结果所以用const_cast去除const成员函数返回的结果的const属性。 条款4确定对象被使用前已先被初始化 主要内容 1、不管是内置类型还是自定义类型的对象都应该在使用之前进行初始化防止出现意想不到的错误除非你明确其在用之前一定会被赋值。 2、尽量使用成员初始化列表去初始化类的成员一方面是效率会高省了无畏的赋值另一个方面是类的某些成员只能通过初始化去完成比如const类型引用类型。 3、成员初始化列表初始化成员变量的顺序取决于声明成员变量的次序。 4、非局部的static对象全局的namespace作用域的或者class内或file作用域内的static对象在多个文件里面使用时它在使用之前是否已初始化是不确定的解决方法是将其搬到自己的专属函数内然后返回其引用即可转化为局部的static对象。 5、多线程情况下可能会有竞争4这个方法不能适用除非是多线程启动之前单线程去一一调用函数完成初始化。 条款5了解C默默编写并调用哪些函数 主要内容 1、一个空的class编译器默认会生成默认的构造函数析构函数拷贝构造赋值构造函数。生成默认构造和析构函数作用是调用父类或者非static成员变量的构造和析构函数。如果自己声明了自定义的构造和析构那么编译器将不会默认生成。拷贝构造赋值构造函数是浅拷贝如果类内管理资源析构的时候可能会有问题需要重载拷贝构造赋值构造函数。编译器有时也会拒绝生成默认的拷贝构造赋值构造函数比如类内有const成员或者引用类型成员如果想要为引用类型成员赋值就得自己重载拷贝构造赋值构造函数。 2、父类的拷贝构造函数如果是private的那么子类也不会生成一个默认的拷贝构造函数因为没有权限。 条款6若不想使用编译器自动生成的函数就该明确拒绝 主要内容 1、如果不想让类支持拷贝或者赋值那么可以声明拷贝构造赋值构造函数两个函数为private这样做就不会被拷贝或者赋值了也不用定义出来其实现防止类内的其他成员函数或者友元函数调用。 条款7为多态基类声明virtual析构函数 主要内容 1、类定义出来如果是作为其他类的基类那么就要给它的析构函数定义为virtual析构函数防止在释放基类指针指向派生类对象的时候发生内存泄漏。 2、如果类不打算作为其他类的基类那么就不要把析构函数定义为virtual析构函数否则对象的体积将会增加且因含有虚表指针就不具有移植性了。这是因为实现virtual函数的原理是对象内部包含了一个虚表指针基类派生类的虚函数的指针都存放在数组里面对象调用哪个虚函数是由虚表指针去函数指针数组里面找到然后调用。每个对象都含有一个虚表指针一个指针在32位机器上占4个字节在64位机器上占8个字节。 3、如果类没有将析构函数定义为virtual析构函数那么最好不要继承它。 条款8别让异常逃离析构函数 主要内容 1、析构函数中有异常的话如果此时是vector类型那么可能第一个对象就销毁时就抛异常继续调用其他对象析构第二个对象抛出异常此时系统将会出现不明确的行为或者过早结束所以不要在析构的时候抛异常。 2、较好的方法是将可能抛出异常的函数开放给用户让用户去调用此时用户就会决定异常抛出后的一个反应程序员在析构时可以加一个双层保险如果没有调用函数标记那么析构这里可以调用一次捕获异常并且记录或者结束程序。 条款9绝不在构造和析构过程中调用virtual函数 主要内容 1、不要在析构或者构造过程中调用virtual函数。假设现在有一个基类A里面有一个A构造函数logTransaction虚函数A构造函数内部调用logTransaction虚函数此时B和C继承自A类B和C类重写了自己的logTransaction函数。如果此时定义一个B类B的构造函数会被调用但是首先应该先构造B的基类A这时候A去构造函数过程中调用A类的虚函数logTransaction基类构造期间虚函数还不是虚函数这个现象的原因是此时B类还没有构造好它里面的成员对象都是未初始化的编译器会当做B类还不存在。这种代码一般编译器会有警告。 2、还有一种情况当基类构造函数调用普通的init函数然后init函数里面调用了虚函数那么此时编译器就有可能就不会有任何告警但是程序执行现象就不会如我们期望的一般。 3、解决方法是基类logTransaction函数不要定义为虚函数将其定义为普通函数然后通过构造函数去调用接受参数这时候派生类在构造的时候将自己这边的参数传到基类的构造函数那边完成调用。也就是说我们无法使用虚函数从基类向下调用在构造期间我们可以让派生类将必要的构造信息向上传递给基类构造函数。 条款10令operator返回一个reference to *this 主要内容 1、按照内置类型可以连续赋值的形式我们在写operator函数的时候就必须返回返回*this引用也是如此。否则返回值效率也会降低。 条款11在operator中处理“自我赋值” 主要内容 1、在写operator的时候需要处理自我赋值的情况提高效率还有一点是需要注意在抛出异常的时候原本对象已经被破坏的情况正常来说应该是先申请临时对象再进行复制将原对象释放掉让指针重新指向新的临时对象返回*this。 2、如果追求效率 可以先把要复制的对象拷贝一份然后用swap函数交换当前对象和拷贝的临时对象。 条款12复制对象时勿忘其每一个成分 主要内容 1、拷贝构造函数和赋值函数中必须处理每一个成员变量即使是后面新加了一个变量也要在拷贝构造函数和赋值函数中进行处理。否则会有问题。 2、派生类进行拷贝构造函数和赋值函数的时候也需要通过派生类的拷贝构造去调用基类的拷贝构造不能忘记了。 3、不要妄想用拷贝构造函数调用赋值函数或者赋值函数调用拷贝构造函数。如果真的要消除两者之间重复的代码可以将重复的代码提取出来为一个init函数放在private里让拷贝构造函数和赋值函数调用init函数即可。
http://www.w-s-a.com/news/31485/

相关文章:

  • 西安网站建设云速网络网站运营情况怎么写
  • 免费建网站的网站微信商城分销系统方案
  • 烟台网站seo服务友情链接有哪些展现形式
  • 什么是移动网站开发免费网站开发框架
  • 做网站 创业wordpress子菜单
  • 门户网站类型有哪些权重7以上的网站
  • 政务网站建设论文android app开发教程
  • 网站开发实训h5总结个人网站注册平台要多少钱
  • 空白网站建设wordpress高亮代码过长
  • 盐城 网站开发什么叫做门户网站
  • 广东快速做网站公司哪家好本地建wordpress
  • dedecms如何做网站贵阳seo计费管理
  • 企业网站设计一般多少钱呼和浩特最好的互联网公司
  • 黄浦专业做网站海南网站策划
  • 网站开发工程师有证书考试吗织梦cms是免费的吗
  • 电子商务网站建设需要学什么门户网站推广介绍方案
  • 网站里的专题页面wordpress查询数据库结构
  • WordPress子站站群网站建设代码生成器
  • 怎么攻击织梦网站甘肃省最新消息今天
  • 赣州哪里可以做网站看装修案例的网站
  • 旅游网站专业化建设的要点php 手机网站 模板
  • wordpress百度站长主动推送长春火车站官网
  • 比较好的响应式网站wordpress博客增加音乐页面
  • 广告公司出售家具 税率江门做网站seo的
  • 网站设计建议建设商务网站作用
  • 网站策划的最终体现是什么模板网站建设流程图
  • 网站设计与开发技术教程十度公司做网站怎么样
  • 企业网站推广方案在哪里智慧团建登录入口官网手机版
  • google网页版入口seo索引擎优化
  • 东乡做网站常州网络公司联系方式