【发布时间】:2017-10-27 22:56:46
【问题描述】:
我的类包含需要使用函数初始化的 const 字段。使用类的静态方法在构造函数的初始化列表中初始化这些值是否合适?
这样做我还没有遇到问题,但是当我读到“静态初始化惨败”时,我担心我忽略了一些稍后会回来咬我的东西,无论哪种方式我都会而是养成正确初始化的习惯。
例子:
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;
}
显然我意识到在这种情况下您不需要函数来计算面积,但实际上该函数会确定更复杂的东西。
【问题讨论】:
-
您通过投票和选择答案来感谢人们,而不是通过添加问题来感谢人们。除此之外,干得好。
-
您可能还想在该函数前面加上
double的类型,从构造函数中删除return并在适当的地方使用public:说明符。 -
你可以在 .cpp 文件中将
initArea设为一个免费的静态函数,这样它就不会“污染”类头 -
“静态初始化顺序惨败”是指跨不同文件初始化静态存储持续时间对象(静态数据成员和命名空间范围变量)。您的案例是关于一个非静态数据成员:完全不同的东西。
标签: c++ constructor constants static-methods initializer-list