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