如何使用类A中的const值构造类B,如下所示:
class A
{
public:
A( );
private:
B b_;
const float PARAM_ = 7.7;
}
class B
{
B(float param);
}
A::A() : b_( PARAM_ )
{
}
当创建b_而不是预期的7.7时,我在上面的PARAM中获得了垃圾值。什么是正确的方式?
答案 0 :(得分:1)
问题是在C ++中,非静态成员按声明的顺序初始化。在b_
之前声明PARAM_
,因此当您在成员初始化列表中编写b_( PARAM_ )
时,b_
将使用垃圾值初始化,则 {{1初始化为7.7。为避免这种情况,请在PARAM_
之前移动PARAM_
的声明。
答案 1 :(得分:0)
如果它适合您的使用,您可以使const静态。 出现此问题的原因是,当您尝试在b的构造函数中使用它时,param的非const版本将不会被初始化。
作为静态,它会在之前初始化。