vig*_*990 4 c++ constructor initialization initialization-list
考虑这个构造函数: Packet() : bits_(0), datalen_(0), next_(0) {}
注意bits_,datalen_并且next_Packet类中的字段定义如下:
u_char* bits_;
u_int datalen_;
Packet* next_;
Run Code Online (Sandbox Code Playgroud)
这部分构造函数意味着什么? bits_(0), datalen_(0), next_(0)
这是一个初始化列表,它将值设置为指定的值.
Packet() : bits_(0), datalen_(0), next_(0)
{
assert( bits_ == 0 );
assert( datalen_ == 0);
assert( next_ == 0);
}
//...
Packet()
{
//bits_ , datalen_, next_ uninitialized here
}
Run Code Online (Sandbox Code Playgroud)
某些成员(const没有默认构造函数的成员或用户定义的类成员)无法在初始化程序列表之外进行初始化:
class A
{
const int x;
A() { x = 0; } //illegal
};
class A
{
const int x;
A() : x(0) { } //legal
};
Run Code Online (Sandbox Code Playgroud)
还值得一提的是,使用这种技术不会发生双重初始化:
class B
{
public:
B() { cout << "default "; }
B(int) { cout << "b"; }
};
class A
{
B b;
A() { b = B(1); } // b is initialized twice - output "default b"
A() : b(1) { } // b initialized only once - output "b"
};
Run Code Online (Sandbox Code Playgroud)
这是初始化成员的优先方式.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |