You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过已有构造函数定义新构造函数?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:48:26