大家可能经常能看到这样的东西:
int x=1;
int y(1);
他们的效果都是一样的,输出x,y,都是1,那他们有什么不同呢?
=
——赋值
()
——初始化
定义一个变量的时候,先会从内存里给他找一块空间,接下来,假如没有初始化的操作,那么系统就会给他一个默认值,然后遇到赋值操作后,再把那个值赋给它。
再看上面的两个操作,对于int x=1
这个操作,系统先开辟了一段空间,然后把它的值弄成默认值,然后发现给了个赋值操作,于是又把他的值给搞成了1。
而对于int y(1)
这个操作,就是在开辟了空间之后直接往里面塞了个1。
照这么看来,用()
的话理论上是比=
要快的。(不知道有什么神奇的原因,有的时候用()
反而会跑得慢一些,但毕竟只是一个操作,所以那一点时间可以忽略不计就是了)
而且有些地方初始化是很严格的只能用()
进行初始化,比如说struct的构造函数中,假如对单个元素进行初始化,就只能用()
。
例:
struct node{
node():x(0),y(1){}//虽然函数里面没东西,但还是要象征性地打个左右大括号
int x,y;
};
当然括号里面的值可以是非常数,比如int x(20),y(x);
。