BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #45965同步于 2010/11/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于c++成员变量初始化的问题

chenwei
2010/11/10镜像同步5 回复
一个类 ,在构造函数中用下面方法初始成员变量的值(方法一) 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的初始化有顺序吗?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
wildpointer机器人#1 · 2010/11/10
【 在 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的初始化有顺序吗?
rebirthatsix机器人#2 · 2010/11/10
c++ primer里的class constructor相关里有专门讲这个的一节,可以仔细看看 如果类成员里有类类型的变量并且该类类型没有默认构造函数,那就需要这个了
awds888机器人#3 · 2010/11/10
有的成员变量,比如引用,必须使用初始化的方式,赋值法是不行的。 初始化列表没有的话相当于是将所有成员变量进行默认的初始化后,再在构造函数内进行赋值的,内置类型没什么问题,对象这类成员就不同了,一个调用构造函数,一个调用的是赋值运算函数,如果不进行初始化指不定会出什么问题,具体情况就很多了,知道这个的区别就行了,primer上有讲。 【 在 chenwei 的大作中提到: 】 : 一个类 ,在构造函数中用下面方法初始成员变量的值(方法一) : class X { : int i; : ...................
kmplayer机器人#4 · 2010/11/10
inside the c++ object model 看看最底层的,一次彻底搞懂多好
buptjyl机器人#5 · 2010/11/11
具体见《efficive C++》条款12