c++ - const 字段的复杂初始化

标签 c++ initialization constants ctor-initializer

考虑这样一个类:

class MyReferenceClass
{
public:
    MyReferenceClass();
    const double ImportantConstant1;
    const double ImportantConstant2;
    const double ImportantConstant3;
private:
    void ComputeImportantConstants(double *out_const1, double *out_const2, double *out_const3);
}

有一个例程 (ComputeImportantConstants) 在运行时计算三个常量。假设计算相当复杂,并且固有地一次产生所有三个值。此外,结果取决于构建配置,因此对结果进行硬编码不是一种选择。

是否有一种明智的方法将这些计算值存储在类的相应 const double 字段中?

如果没有,您能否建议一种更自然的方式来在 C++ 中声明此类?

在 C# 中,我会在此处使用带有静态构造函数的静态类,但这在 C++ 中不是一个选项。我也考虑过让 ImportantConstant1..3 成为非常量字段或函数调用,但两者似乎都不如。

我发现初始化 const 字段的唯一方法是 use initializer lists , 但似乎不可能在这样的列表中传递多输出计算的结果。

最佳答案

为什么你不能这样做:

MyReferenceClass ComputeImportantConstants(){
    //stuff to compute
    return MyReferenceClass( const1, const2, const3 );
}

MyReferenceClass{
public:
    MyReferenceClass(double _1, double _2, double _3) 
        : m_Const1(_1),
        m_Const2(_2),
        m_Const3(_3){}

    double getImportantConst1() const { return m_Const1; }
    double getImportantConst2() const { return m_Const2; }
    double getImportantConst3() const { return m_Const3; }
private:
    const double m_Const1,
                 m_Const2,
                 m_Const3;
};

像那样将计算函数变成工厂函数?

关于c++ - const 字段的复杂初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256192/

相关文章:

c++ - 树莓派工具链上的 std::shared_future

c++ - 如何在C++中循环遍历具有不同长度的动态2D数组

c++ - 修改g++库路径

c++ - Glew 不初始化

c++ - 无法从大括号括起来的初始值设定项列表进行转换

c++ - const 成员函数需要说明

c++ - const char[] 和 char[] 的区别

c++ - C++ 中的结构与数组

swift - 如何在 Swift 的便利初始化器中调用类方法

c++ - 如何避免将类成员传递给回调的类似 const 和非 const 成员函数之间的代码重复?