委托构造函数是C++11特性,允许一个构造函数在初始化列表中调用同一类的其他构造函数以复用初始化逻辑;必须位于初始化列表、不可与其他成员初始化共存、不可循环委托、不能在函数体内调用。

委托构造函数是 C++11 引入的语法特性,允许一个构造函数调用同一类中的另一个构造函数,从而避免重复代码,提升初始化逻辑的复用性和可维护性。
委托必须出现在构造函数的初始化列表中,且不能与其他成员初始化共存(即被委托的构造函数负责全部初始化)。语法形式为:: ClassName(参数...)。
当多个构造函数逻辑高度相似时,可提取公共初始化到一个“主构造函数”,其余构造函数委托给它:
struct Person {
std::string name;
int age;
std::string id;
// 主构造函数(处理核心初始化)
Person(std::string n, int a, std::string i)
: name(std::move(n)), age(a), id(std::move(i)) {}
// 委托构造:只提供姓名和年龄,默认ID为空
Person(std::string n, int a)
: Person(std::move(n), a, "") {} // ← 委托给上面那个
// 委托构造:只提供姓名,默认年龄0、ID为空
Person(std::string n)
: Person(std::move(n), 0, "") {}
};委托发生在对象生命周期的初始化阶段,不是运行时普通调用。因此:
立即学习“C++免费学习笔记(深入)”;
this->Person(...) —— 这是非法的,会触发编译错误
委托构造适合逻辑分支较复杂的情况;简单场景仍可优先用默认参数。二者不互斥,但注意:带默认参数的构造函数也可被委托,只要签名匹配。
Person(std::string n, int a = 0, std::string i = "") 可作为委托目标Person(string)),再定义默认参数版本可能引发歧义,需谨慎基本上就这些。委托构造函数不是万能的,但它让构造逻辑更集中、更安全,尤其适合需要统一资源分配或状态校验的类。
以上就是c++++中的委托构造函数(Delegating Constructors)怎么用_c++ C++11代码复用【语法】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号