C++构造函数初始化问题

class A
{
private:
int b;
public:
A(void);
}

A::A(void):b(2)
{}

为什么要这样初始化b

A::A(void)
{b=2;}

和这样初始化一样么

上面那样初始化 有什么好处?

第一种方式是初始化,即在给变量b分配内存空间时就把它的值设定了。第二种方式是赋值,设值时变量b已经存在。如果变量b是一个类的实例对象,这两种方式的差别会比较直观一些,第一种方式会调用类的拷贝构造函数,而第二种方式调用的是类的赋值构造函数。
至于好处,因为第一种方式与第二种相比少了赋值的步骤,所以执行效率高
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-02
在这里是一样的,两种没什么区别,你这里是默认构造函数C++里习惯用这种方式初始化,为了在进入构造函数体前就初始化~~
但在有的时候必须使用这种初始化列表的方式初始化,比如:
1.没有默认构造函数的类类型的成员也就是用对象初始化(这是因为构造函数分为两个阶段:1.初始化阶段,2.普通计算阶段.初始化阶段发生在计算阶段开始之前)
2.你定义的成员为const或引用类型.
时就必须像A::A(void):b(2)这样用冒号来初始化~~
第2个回答  2008-11-02
第3个回答  2008-11-02
我们在C++编程过程中通常把头文件与源码文件分离。这样我们在修改或修升级的程序之中只需要修改CPP文件就可以,而不需要对程序结构对太多改动。
你那样写是可以的。 在写一些小程序的时候,那样也是完全可取的。但是你最好还是养成结构构定义与功能实现相分离的模式.
第4个回答  2008-11-02
用初始化列表比在函数体内添加执行语句的运行代价更小。
第5个回答  2020-03-17
a(i),r(a)
相当于const
int
a
=
i,const
int
&r=a;此时r是a的引用;
而:a(i),r(i)
相当于const
int
a
=
i,const
int
&r=i;
即r是i的引用了,而i在构造函数结束是释放了,他的值就是不可预期的某个值
相似回答