使用静态方法初始化 const class 字段是好事还是坏事?

Is initialising const class fields using static methods good or bad practice?

我 class 包含需要使用函数初始化的常量字段。使用 class 的静态方法在构造函数的初始化列表中初始化这些值是否合适?

我这样做还没有遇到问题,但是当我读到 'static initialisation fiasco' 时,我担心我忽略了一些稍后会回来咬我的东西,无论哪种方式我宁愿养成正确初始化的习惯。

示例:

square.hpp:

class Square
{
    const double area;

    static initArea(double length);

    Square(double length);
}

square.cpp

Square::initArea(double length)
{
    return (length * length);
}

Square::Square(double length) :
    area(initArea(length))
{
    return;
}

显然我意识到在这种情况下您不需要函数来计算面积,但实际上该函数会确定更复杂的东西。

Is it appropriate to use a static method of the class to initialize these values in the initializer list of the constructor?

是的,这绝对合适:静态辅助方法非常适合此任务,因为它们可以 运行 在任何对象的上下文之外。因此,在初始化列表中调用它们是完全有效的。

内联这样一个简单的函数可能也是一个好主意。