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 – 初始化列表中的中间计算所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)