使用来自 class A 的 const 值初始化 class B?
Initialize class B with a const value from class A?
如何使用 class A 中的常量值构造 class 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 中得到垃圾值。正确的方法是什么?
如果它适合您的用途,您可以将 const 设为静态。
出现问题是因为当您尝试在 b 的构造函数中使用它时,您的参数的非常量版本不会被初始化。
作为静态的,它会被更早地初始化。
问题是在 C++ 中,非静态成员是按声明顺序初始化的。 b_
在PARAM_
之前声明,所以当你在成员初始化列表中写b_( PARAM_ )
时,b_
被初始化为垃圾值,然后 PARAM_
初始化为 7.7。为避免这种情况,将 PARAM_
的声明移动到 b_
.
之前
如何使用 class A 中的常量值构造 class 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 中得到垃圾值。正确的方法是什么?
如果它适合您的用途,您可以将 const 设为静态。 出现问题是因为当您尝试在 b 的构造函数中使用它时,您的参数的非常量版本不会被初始化。
作为静态的,它会被更早地初始化。
问题是在 C++ 中,非静态成员是按声明顺序初始化的。 b_
在PARAM_
之前声明,所以当你在成员初始化列表中写b_( PARAM_ )
时,b_
被初始化为垃圾值,然后 PARAM_
初始化为 7.7。为避免这种情况,将 PARAM_
的声明移动到 b_
.