C++为类中提供类成员的初始化列表 类对象的构造顺序是这样的: 使用初始化列表有两个原因: 1.必须这样做:
class ABC
...{ public: private: }; class MyClass ...{ public: private: }; 2.效率要求这样做: 注意:构造函数需要初始化的数据成员,不论是否显示的出现在构造函数的成员初始化列表中,都会在该处完成初始化,并且初始化的顺序和其在声明时的顺序是一致的,与列表的先后顺序无关,所以要特别注意,保证两者顺序一致才能真正保证其效率。 为了说明清楚,假设有这样一个类: 另一篇关于初始化列表的文章:
C++初始化类的成员,不但可以用构造函数(constructor)完成,而且可以用初始化类成员列表来完成。MFC大量用到此方法。例如有些初学者可能不大理解如下代码:
class A
{
public:
}
A::A()
:member_var(0)
{
}
他们觉得这个构造函数的定义应该只能这样写:
A::A()
{
}
其实两种方法都可。但是有些情况下,只能用第一种,而且通常情况下用第一种也会效率高些。
其实,第一种方法是真正的初始化(
initialization),而在构造函数内实现的“=”操作其实是赋值(assign)。这两种方法的一切区别从这儿开始。区别大概如下:
class B class A —————————————————————————————————————— 初始化顺序:
class test
{ { } }; 黄色的既是初始化列表,他们会在构造函数正式调用前被调用,且他们的初始化顺序并不是根据 初始化列表中出现的顺序,而是他们声明的顺序来初始化。如上: 初始化顺序是:a, str, o; 一般用于初始化 常量类型,静态类型的数据,或者不能独立存在的数据 |
c++成员初始化列表
最新推荐文章于 2024-03-02 22:02:16 发布
++成员初始化列表
2009-03-20 14:50