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

来源:百度知道 编辑:UC知道 时间:2024/07/07 09:57:50
class A
{
private:
int b;
public:
A(void);
}

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

为什么要这样初始化b

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

和这样初始化一样么

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

第一种方式是初始化,即在给变量b分配内存空间时就把它的值设定了。第二种方式是赋值,设值时变量b已经存在。如果变量b是一个类的实例对象,这两种方式的差别会比较直观一些,第一种方式会调用类的拷贝构造函数,而第二种方式调用的是类的赋值构造函数。
至于好处,因为第一种方式与第二种相比少了赋值的步骤,所以执行效率高

在这里是一样的,两种没什么区别,你这里是默认构造函数C++里习惯用这种方式初始化,为了在进入构造函数体前就初始化~~
但在有的时候必须使用这种初始化列表的方式初始化,比如:
1.没有默认构造函数的类类型的成员也就是用对象初始化(这是因为构造函数分为两个阶段:1.初始化阶段,2.普通计算阶段.初始化阶段发生在计算阶段开始之前)
2.你定义的成员为const或引用类型.
时就必须像A::A(void):b(2)这样用冒号来初始化~~

http://zhidao.baidu.com/question/69183340.html
这里说得很明白.

我们在C++编程过程中通常把头文件与源码文件分离。这样我们在修改或修升级的程序之中只需要修改CPP文件就可以,而不需要对程序结构对太多改动。
你那样写是可以的。 在写一些小程序的时候,那样也是完全可取的。但是你最好还是养成结构构定义与功能实现相分离的模式.

用初始化列表比在函数体内添加执行语句的运行代价更小。