能否通过已有构造函数定义新构造函数?C++构造函数复用疑问
C++构造函数委托解决重复计算问题
你可以用C++11引入的构造函数委托特性,直接让S(const C& c)调用已有的S(int a, int b)构造函数,这样既复用了初始化逻辑,又避免重复调用开销高昂的computeA()和computeB()。
正确的代码实现如下:
class C { // 复杂类的其他成员 public: // 注意:computeA和computeB需要设为可访问(比如public),否则S无法调用 int computeA(); int computeB(); }; struct S { S(int a, int b) : a(a), b(b), ab(a * b) {} // 委托构造函数:直接调用S(int, int)构造函数 S(const C& c) : S(c.computeA(), c.computeB()) {} int a; int b; int ab; };
关键说明:
- 构造函数委托必须在初始化列表中完成,且是初始化列表的第一个(也是唯一的)成员初始化项,不能在构造函数体内部调用另一个构造函数。
- 这种写法只会调用一次
computeA()和computeB(),它们的结果会传递给S(int, int)构造函数,由其完成ab的计算,完全符合你的需求。 - 如果你的编译器不支持C11及以上标准,那确实需要借助辅助函数先缓存
computeA()和computeB()的结果,再初始化成员,但现代编译器基本都支持C11及更高版本。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

