**代碼**:
~~~
#include<iostream>
using namespace std;
class A
{
private:
int x1;
int x2;
public:
A():x2(1),x1(x2++){} //初始化列表
void print()
{
cout<<"x1="<<x1<<endl
<<"x2="<<x2<<endl;
}
};
int main()
{
A a;
a.print();
return 0;
}
~~~
**疑**:x1,x2最終被輸出什么值呢?為什么?
解答:上機調試下會發現輸出的結果是:x1是一個隨機數,x2是1。為什么?因為在初始化列表中在給x1賦值為x2++時,這個x2并未初始化,也就是說x2里面什么東西也沒裝。也許你會問我不是在前面已經給x2賦值了嗎,沒錯,但是有一個問題你忽略了,那就是初始化列表的賦值順序是依照x1和x2的聲明順序的順序來初始化的,也就是說在代碼中,程序是先給x1賦值為x2++(此時x2并未初始化),再給x2賦值為1。還有初始化列表里的賦值,是在變量被聲明時進行的,所以多使用初始化列表是可以提升程序效率的。
!!代碼疑云系列由本人在[天天唯C論壇](http://www.tiantianvc.com/)下首發
======= welcome to my HomePage([*http://blog.csdn.net/zhanxinhang*](http://blog.csdn.net/zhanxinhang)) to have a?communication =======