针对前天默认参数与初始化列表机制的一些深究
const类型和引用类型,在创建时,必须进行初始化。就是用参数列表初始化,移到构造函数体内部,则无法通过编译。也就是说,一旦进入构造函数体,初始化就已经完成了。那么其他内置类型或者自定义类型是不是这样的呢
#include<iostream>
using namespace std;
class CExample {
public:
int a;
float b;
//构造函数初始化列表
//CExample(): a(0),b(8.8)
//{}
//构造函数内部赋值
CExample()
{
cout<<this->a<<this->b<<endl;
a=0;
b=8.8;
}
};
int main(){
CExample c1;
cout<<c1.a<<c1.b<<endl;
}
在本地做了个test,编译器migwin 答案是肯定的,
结论:构造函数内中对类成员给初值,这之前函数成员是不是已经被初始化过了,给的是垃圾值,说是构造函数,在进入函数体前,已经初始化了函数成员,一旦进入函数体所做的操作只是重新赋值,无论是给了默认参数,还是在函数体内直接赋值
只有参数化列表是真正意义上的初始化,豁然开朗