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

c – 初始化列表中的中间计算,第1张

概述我有类似的东西 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成员”错 我有类似的东西

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) {}
总结

以上是内存溢出为你收集整理的c – 初始化列表中的中间计算全部内容,希望文章能够帮你解决c – 初始化列表中的中间计算所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存