返回信息流一个类 ,在构造函数中用下面方法初始成员变量的值(方法一)
class X {
int i;
int j;
public:
X(): j(0), i(0) { }
};
但是好像这样也行(方法二)
class X {
int i;
int j;
public:
X()
{j=0;
i=0; }
};
书上一般推荐用方法一来初始化,为什么?方法二有什么问题?还有方法一对于i和j的初始化有顺序吗?
这是一条镜像帖。来源:北邮人论坛 / cpp / #45965同步于 2010/11/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于c++成员变量初始化的问题
chenwei
2010/11/10镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
【 在 chenwei (碧纱窗) 的大作中提到: 】
: 一个类 ,在构造函数中用下面方法初始成员变量的值(方法一)
: class X {
: int i;
: int j;
: public:
: X(): j(0), i(0) { }
: };
上面的方法叫初始化。
: 但是好像这样也行(方法二)
: class X {
: int i;
: int j;
: public:
: X()
: {j=0;
: i=0; }
: };
上面的叫赋值。
初始化和赋值对内置类型来说,区别不明显。
但对于类类型来说,初始化指:一个对象从无到有的过程。一般是调用构造函数或拷贝构造函数完成。赋值指的是:对已存在的对象,从一种状态改变到另一种状态的过程。一般是调用operator=完成。
在执行构造函数函数体前,已经完成了非static成员变量的初始化。初值列表可以控制初始化过程。
: 书上一般推荐用方法一来初始化,为什么?方法二有什么问题?还有方法一对于i和j的初始化有顺序吗?
c++ primer里的class constructor相关里有专门讲这个的一节,可以仔细看看
如果类成员里有类类型的变量并且该类类型没有默认构造函数,那就需要这个了
有的成员变量,比如引用,必须使用初始化的方式,赋值法是不行的。
初始化列表没有的话相当于是将所有成员变量进行默认的初始化后,再在构造函数内进行赋值的,内置类型没什么问题,对象这类成员就不同了,一个调用构造函数,一个调用的是赋值运算函数,如果不进行初始化指不定会出什么问题,具体情况就很多了,知道这个的区别就行了,primer上有讲。
【 在 chenwei 的大作中提到: 】
: 一个类 ,在构造函数中用下面方法初始成员变量的值(方法一)
: class X {
: int i;
: ...................