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) {} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |