C++中关于构造函数的一个小问题

就是在初始化列表初始化和不在初始化列表中初始化的区别如classa{a():b(1)}classa{a(){b=1;}}这两种初始化有什么区别?各自都在什么情况下使用?... 就是在初始化列表初始化和不在初始化列表中初始化的区别

class a{a():b(1)}
class a{a(){b=1;}}
这两种初始化有什么区别?各自都在什么情况下使用?
展开
 我来答
三秒区小王子
2011-10-29 · TA获得超过281个赞
知道小有建树答主
回答量:135
采纳率:100%
帮助的人:102万
展开全部
一楼说的不对。
构造函数在初始化类的成员的时候最好使用你写的以一种方法,第一种方法是直接用1来初始化b,而第二种是先创建一个b,在用赋值运算把1赋值给b。
知道他们的区别的时候问题就来了:假如b是一个自定义的类型,比如class b;而你在创建b这个类的时候没有重载操作符“=”,那么第二种赋值方法就挂了,因为编译器不知道怎么把一个对象通过“=”来赋值给b;但是你在定义一个类的时候一般会定义“拷贝构造函数”,所以用第一种方法初始化,就会调用构造函数完成初始化。
不懂可以追问。
追问
那如果b是类中的数据成员,那这两种有区别吗?
追答
如果是内置类型的数据成员,区别还是我说的那样,但是这两种所实现的功能是一模一样的,实现上没什么区别了,只是在性能上第一种较好。养成使用第一种初始化的习惯,虽然感觉别扭。
wanfustudio
2011-10-29 · TA获得超过1万个赞
知道大有可为答主
回答量:5513
采纳率:100%
帮助的人:3756万
展开全部
你这个没有什么区别
------
有区别的用法是:
不允许在函数内初始化的,如基类初始化, 引用变量, 常量,没有默认构造的类成员
或者说以上仅可以用初始化列表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ljh_beer
2011-10-30 · 超过24用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:65.3万
展开全部
没有多大区别,效果是一样的,看自己的感觉,
一定要区分的话, 列表初始化是在编译时初始化,而构造函数是在运行时赋初值。理论上后者的空间开销和时间开销要大一些。
实际编程的话,这一点开销就不计较了,关键是怎么看的舒服,代码不仅是机器运行,更多的是给人看的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wang_shui_jing
2011-10-29
知道答主
回答量:7
采纳率:0%
帮助的人:11.7万
展开全部
两者没有太大的区别,a():b(1)的意思与a(){b=1;}相同,都是将b初始化为1。不过前者简单方便,但这只适用于简单的赋值,若还要进行其他运算,还是要用后者。希望你能明白!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式