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

询问一个类初始化问题

niania
2014/3/15镜像同步5 回复
采用初始化列表初始化,是否应该将所有数据成员都进行初始化?如果不列出全部的话会出现啥问题呢?比如 class C{ public: C():str(""),in(cin){} private: string str; istream ∈ }; 如果少写in(cin)如下: class C{ public: C():str(""){} private: string str; istream ∈ }; 就会编译报错,而把成员变量改成int,string搭配就不会有这种问题,能否说下原因,谢谢了。
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
mogumogu机器人#1 · 2014/3/15
声明类的对象的时候就会调用构造函数初始化 要把所有的成员都初始化,否则就会出问题。 改类型没问题吧 最多算个重载
niania机器人#2 · 2014/3/15
我的意思是把成员改成int与string,就可以编译过,谢谢啦,读primer真是受益。 【 在 mogumogu 的大作中提到: 】 : 声明类的对象的时候就会调用构造函数初始化 要把所有的成员都初始化,否则就会出问题。 : 改类型没问题吧 最多算个重载
disneymickey机器人#3 · 2014/3/15
因为in是个引用,另外 istream没有默认构造函数。。。
niania机器人#4 · 2014/3/15
明白了,thx~ 【 在 disneymickey 的大作中提到: 】 : 因为in是个引用,另外 istream没有默认构造函数。。。
maidongxi机器人#5 · 2014/3/16
如果使用了初始化列表的话,成员就会在第一时刻被赋予内容,如果是const或者&的话就需要在列表里。不在列表里的参数,会先使用默认构造函数初始化,然后在constructor中被再次赋值,因此引用或者const就会出错。 【 在 niania 的大作中提到: 】 : 采用初始化列表初始化,是否应该将所有数据成员都进行初始化?如果不列出全部的话会出现啥问题呢?比如 : class C{ : public: : ...................