对象的初始化
对象必须正确初始化,才能正常使用:
- int i = 10;
- cout << i << endl;
对象常常包括几种初始化的方式,我们在此归纳一下,并进行详细解析。其中:t是一个属于T类型的对象,x属于另外一个类X。
T t:该形式直接调用T的构造函数,完成t的初始化。
T t2(t):该形式调用T的拷贝构造函数T(const T &)。
T t(x):该形式调用转换构造函数T(const X &)。
T t2 = t:现在的大部分编译器都会将以上语句直接优化成:
T t2(t);
也就是说,它直接调用转换构造函数T(const X &)。
T t2 = x:在编译器进行优化的情况下,它等价于:
- T t2(x);
也就是说,它直接调用转换构造函数T(const X &)。但是在没有进行优化的情况下,它会先构造一个对象,然后对其进行赋值:
C++的构造函数非常强大,因此也带来了C++对象的初始化非常简单、灵活。当然,这种"灵活"的C++语法也带来了副作用,即"捉摸不透",对于那些即将准备应聘笔试的C++程序员来说,最好能够记住以上的几种方式的解释,因为它们很有可能成为考官藉以得意的考题。
- T temp(x);
- T t2(temp);