加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 初始化列表中的中间计算

发布时间:2020-12-16 10:03:03 所属栏目:百科 来源:网络整理
导读:我有类似的东西 struct Foo { const double a; const double b; Foo(double c);}Foo::Foo(double c) { double tmp = f(c); a = g(tmp); b = h(tmp);} 其中f,g,h是在别处实现的功能.这给出了预期的“未初始化的const成员”错误. 我可以解决它 Foo::Foo(double
我有类似的东西

struct Foo {
    const double a;
    const double b;
    Foo(double c);
}

Foo::Foo(double c) {
    double tmp = f(c);
    a = g(tmp);
    b = h(tmp);
}

其中f,g,h是在别处实现的功能.这给出了预期的“未初始化的const成员”错误.

我可以解决它

Foo::Foo(double c): a (g(f(c))),b (h(f(c))) {}

但是f是一个昂贵的功能,我不想运行它两次.

我的问题是,如果不运行f两次或让tmp成为Foo的永久成员,我怎样才能解决这个问题?

解决方法

通常,委托构造函数为这类问题提供了一种简单的解决方案.在这种情况下,您将不得不介绍一些区分两个构造函数的方法:

private:
  // the int param is unused
  Foo(double fc,int) : a(g(fc)),b(h(fc)) {}

public:
  Foo(double c) : Foo(f(c),0) {}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读