**代码**:
~~~
#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 =======