使用静态方法初始化 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?
是的,这绝对合适:静态辅助方法非常适合此任务,因为它们可以 运行 在任何对象的上下文之外。因此,在初始化列表中调用它们是完全有效的。
内联这样一个简单的函数可能也是一个好主意。
我 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?
是的,这绝对合适:静态辅助方法非常适合此任务,因为它们可以 运行 在任何对象的上下文之外。因此,在初始化列表中调用它们是完全有效的。
内联这样一个简单的函数可能也是一个好主意。