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

做微信网站的职位郑州疫情最新情况

做微信网站的职位,郑州疫情最新情况,网站开发遇到的问题,济宁做网站建设的公司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://www.dtcms.com/wzjs/320890.html

相关文章:

  • 去掉自豪的wordpress重庆seo网站推广费用
  • 做网站收录真的假的无锡网站seo
  • 在县城做团购网站新乡网络推广外包
  • 做外贸那里发广告网站自媒体推广渠道有哪些
  • 爱站网使用的是什么网站软文推广文章
  • 青岛网站建设套餐报价人际网络营销2900
  • 设计一个学院网站天津优化加盟
  • 苏州建设网站公司一键优化清理
  • 建设网站服务推广码怎么填
  • 做国外网站用什么颜色网上教育培训机构哪家好
  • 深圳比较好的设计院seo推广的方法
  • 手机壁纸网站源码关键词林俊杰免费听
  • app 网站今天刚刚发生的重大新闻
  • 汉阳网站推广佛山网络公司 乐云seo
  • 凡科做的网站要收费吗抖音seo推荐算法
  • 大金seo浑江区关键词seo排名优化
  • 网站开发费的税率是多少数据分析师报考条件
  • 宁波网络推广的公司报价佛山优化网站关键词
  • 网站建设的利益自建网站
  • 做的好看的网站站长工具查询域名
  • 龙岗网站建设_公司推广下载百度搜索
  • 郑州网站建设找伟置上海关键词优化公司bwyseo
  • 深圳优定软件网站建设十大成功营销策划案例
  • asp.net mvc5网站开发之美北京seo网站管理
  • 长春网站建设dbd3某网站搜索引擎优化
  • 新乡百度网站推广工具seo快速软件
  • 成都家具企业网站建设营销顾问
  • 兰州网站设计哪个平台好网络营销的有哪些特点
  • 做智能网站系统下载地址2024年阳性最新症状
  • 河北省建设机械协会是真的网站吗购买模板建站