在类中 (
m_A
) 与在初始化器列表 (class B
) 中初始化对象成员变量 class C
有什么区别?一种方法是否比另一种方法更有效或通常更受欢迎?
class A
{
public:
A(int num) { m_Int = num; }
private:
int m_Int;
};
class B
{
private:
A m_A{10};
};
class C
{
public:
C(): m_A(10) {};
private:
A m_A;
};
有一种方法更有效吗
不,如果您衡量 CPU 周期的效率,则不然。在其他方面可能会更有效,例如与隐藏在实现中相比,在头文件中可见。然后可以通过另一个程序员理解默认值所需的时间来衡量效率。
当您不想使用处于未初始化状态的成员变量构造对象时,类内初始化可能是首选。另一方面,如果您不希望您的类稍后进行(昂贵的)初始化(如果需要),您可以在构造函数中查找实际上将初始化成员变量的初始化程序列表。没有对错之分。...或者通常比其他更受青睐?