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

做网站便宜还是app便宜网站建设又叫什么软件

做网站便宜还是app便宜,网站建设又叫什么软件,上市公司集团网站建设,爱战网关键词挖掘机C11 引入的委托构造函数(delegating constructor) 一、概念与语法 委托构造指一个构造函数在其初始化列表中,直接调用同类的另一个构造函数来完成部分(或全部)初始化。 语法形式: class A { public:A(int …

C++11 引入的委托构造函数(delegating constructor)


一、概念与语法

  • 委托构造指一个构造函数在其初始化列表中,直接调用同类的另一个构造函数来完成部分(或全部)初始化。

  • 语法形式:

    class A {
    public:A(int x, int y): _x(x), _y(y){ /* 主构造逻辑 */ }// 委托构造:将初始化委托给 A(int,int)A(): A(0, 0)    // 委托到上面带参构造{ /* 可留空或做额外逻辑 */ }A(int x): A(x, 0)    // 委托到 A(int,int){ }
    private:int _x, _y;
    };
    
  • 只有一个委托目标可写在初始化列表的最开头,而且初始化列表中不能再出现成员或基类初始化,否则编译失败。


二、使用场景

  1. 消除重复代码
    多个构造函数共享“公共初始化”逻辑时,将初始化集中在一个“主构造函数”中,其它构造函数只负责传参及少量收尾工作。
  2. 统一资源获取/设置
    比如打开文件、分配内存、注册回调等步骤应只在一处编写,避免修改遗漏。
  3. 与默认参数不可兼得时的替代
    对于需要在不同分支做不同预处理,再调用主构造,委托构造比重载+默认参数更灵活。

三、执行顺序

假设有三种构造函数链:

A()      : A(1)       { std::cout<<"A() body\n"; }
A(int x) : A(x, 2)    { std::cout<<"A(int)\n"; }
A(int x, int y)       { std::cout<<"A(int,int)\n"; }

A() 时,调用流程为:

  1. 调用 A() 的初始化列表,委托到 A(int)
  2. A(int) 的初始化列表,委托到 A(int,int)
  3. 进入 A(int,int)——执行成员和基类的初始化,再执行它的函数体;
  4. 返回 A(int),执行其函数体;
  5. 返回 A(),执行其函数体。

输出示例:

A(int,int)
A(int)
A()

四、限制与注意事项

  1. 只能委托同一类内部的另一个构造
    不能跨类委托,也不能在同一初始化列表里同时委托和初始化成员/基类。

  2. 禁止循环委托
    A 委托到 B,B 又委托到 A,会导致无限递归。编译器会报错。

  3. 初始化列表顺序不变
    即使在委托链中先后出现,基类子对象仍旧最先初始化,接着按声明顺序初始化成员。

  4. 与默认成员初始化配合

    • 如果成员在类内已给出默认初始化,主构造函数或其委托目标可覆盖它;
    • 非委托目标构造函数不要在初始化列表写成员初始化,以免与委托冲突。
  5. 异常安全
    所有初始化都在主构造函数里发生,如果主构造抛异常,已初始化的成员会被正确析构。

  6. 可与 explicit / 隐式转换结合
    可以给委托构造函数加 explicit,防止意外隐式构造。


五、综合示例

#include <iostream>
#include <string>class Logger {
public:Logger(const std::string& name, int level): _name(name), _level(level){std::cout << "Logger("<<_name<<","<<_level<<")\n";}// 委托到 Logger(name, 0)Logger(const std::string& name): Logger(name, 0){std::cout << "Logger(name)\n";}// 委托到 Logger("default", 0)Logger(): Logger("default"){std::cout << "Logger()\n";}private:std::string _name;int         _level;
};int main() {Logger L1;                 // default 构造Logger L2("network");      // name 构造Logger L3("db", 3);        // 主构造return 0;
}

输出:

Logger(default,0)
Logger(name)
Logger()
Logger(network,0)
Logger(name)
Logger(db,3)

六、最佳实践

  1. 明确主构造函数
    将最完整、最“重”初始化的构造函数作为主构造,保持其逻辑最全。
  2. 文档注释
    在头文件注明哪个构造是“委托”,以及委托的入口/出口含义。
  3. 避免成员初始化冲突
    除主构造外,其它构造不在初始化列表中出现成员/基类初始化,以免编译器报“不能与委托共存”。
  4. 链式委托深度适中
    链太深可能影响可读性和调试,建议不超过 2~3 级
  5. 与默认参数配合
    对于可省略的参数,也可用默认参数+委托构造混合方式,让 API 既简洁又灵活。

文章转载自:

http://ZfIjK9p8.cwfkm.cn
http://8kmYHRzt.cwfkm.cn
http://thz5L6dO.cwfkm.cn
http://msLbiYKI.cwfkm.cn
http://JUyPFwKC.cwfkm.cn
http://NC8WTIlV.cwfkm.cn
http://cPA5dsi0.cwfkm.cn
http://6zwRFfcB.cwfkm.cn
http://dyTBphOe.cwfkm.cn
http://zQ0jrmL7.cwfkm.cn
http://fsrfE0UZ.cwfkm.cn
http://c4iPhE51.cwfkm.cn
http://xnoEsf38.cwfkm.cn
http://v4h4mEna.cwfkm.cn
http://mdJEmIj6.cwfkm.cn
http://Gs4Zqurt.cwfkm.cn
http://VnxVEL2n.cwfkm.cn
http://ydl4sqo1.cwfkm.cn
http://NBucsqT4.cwfkm.cn
http://39DJibjp.cwfkm.cn
http://RBztx2jI.cwfkm.cn
http://cmf1nKSw.cwfkm.cn
http://eZx0zOpA.cwfkm.cn
http://6cMf85AH.cwfkm.cn
http://3s6NvIRN.cwfkm.cn
http://BFzodRXj.cwfkm.cn
http://4e7nLzny.cwfkm.cn
http://l6rS7WBm.cwfkm.cn
http://2xxrdwJL.cwfkm.cn
http://uyLAPUqi.cwfkm.cn
http://www.dtcms.com/wzjs/750511.html

相关文章:

  • 微网站模板代码甘肃广川工程建设有限公司网站
  • 建设工程招标专业网站做网站后的收获
  • 网站的图片要会员才能下载怎么做网站建设飠金手指排名十三
  • 建筑工程网站导航做一个购物网页
  • 招聘网站上找在家做中小企业网站功能
  • 西安视频拍摄制作公司seo搜索如何优化
  • 泰国做那个视频网站免费咨询服务协议合同范本
  • 优秀旅游网站设计支持html5的网站
  • 国内简约网站wordpress设置固定链接404
  • 做的物流网站有哪些网站专题策划方案
  • 电脑上不了建设厅网站企业管理咨询经营范围
  • 怎么做网站dns加速做网站的技术哪个简单
  • 响应式网站制作视频对接国家战略建设海上福州网站
  • xxx学校校园网站建设实践建设企业网站企业网上银行对公
  • 做网站的属于什么工作类型在线建设房屋设计网站
  • 怎样创建一个网站平台房山石家庄网站建设
  • 深圳建设网站哪家好如何注册免费网站域名
  • 开封建网站wordpress课程
  • 网站建设公司投诉电话网站建设本地还是外地
  • 郑州广告公司网站建设wordpress 导入
  • 做网站要学多久最吉祥的公司名字大全
  • 专做网页的网站北京培训机构
  • 网站推广宜选刺盾云下拉外销网站怎么做的
  • 济南做网站哪里好中国铁路建设投资公司网站熊学军
  • 有哪些做公司网站上海建筑建材业地址
  • 湖南响应式网站建设费用vps做网站需要做哪些准备
  • 山东临沂网站设计公司彩票网站制作开发
  • 东莞seo建站推广费用网站素材下载
  • 山东省建设工程电子信息网站网站官网认证怎么做
  • 永久开源的免费建站系统忘记wordpress密码