用类A中的const值初始化B类?

时间:2016-07-12 13:11:46

标签: c++ initializer-list

如何使用类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中获得了垃圾值。什么是正确的方式?

2 个答案:

答案 0 :(得分:1)

问题是在C ++中,非静态成员按声明的顺序初始化。在b_之前声明PARAM_,因此当您在成员初始化列表中编写b_( PARAM_ )时,b_将使用垃圾值初始化, {{1初始化为7.7。为避免这种情况,请在PARAM_之前移动PARAM_的声明。

答案 1 :(得分:0)

如果它适合您的使用,您可以使const静态。 出现此问题的原因是,当您尝试在b的构造函数中使用它时,param的非const版本将不会被初始化。

作为静态,它会在之前初始化。