C里,这里的冒号起到的什么是什么?

来源:百度知道 编辑:UC知道 时间:2024/05/22 06:40:06
class A{
...
A(int t = 0):_a(t){}
...
int _a;
};

这是标志初始化列表的意思。
构造函数将自动调用t来初始化_a.

这比_a = t更好。
因为更快。如果你不写初始化列表,编译器也会自动调用类型_a的构造函数来初始化_a.
更多请见Effective C++..这是本经典c++书。

构造函数后接:,其后的内容是初始化内容。初始化的内容比构造函数更先执行,而且效率更高。

通常,在以下几方面需要用到:
1. 基类需要使用参数构造,比如
class A {
public: A(int a) {..}
}
class B : public A {
public: B(int a) : A(a) {...}
}
2. 初始化常量、引用等特殊成员。
常量是需要在申明的时候赋值的,引用变量是必须在申明的时候赋值的,当他们用作成员的时候,需要在构造中初始化。比如
class A {
public: A(C& c) : v(3), c(c) {...}
private: C& c;
private: const int v;
}
3. 其实成员变量的初始化,比如将某些数值类型初始化为0,将指针初始化为NULL等。这个就不用举例了。

这个是构造函数的初始化表。

在这里的意识是,当A实例化的时候,调用默认构造函数,把 t的值赋给_a。

初始化列表。

一楼的回答的真好