类成员数据的赋值与初始化的区别

JaneThink 2008-11-05 10:15:11
如题:对这两者之间的区别不是很明白,C++primer中只是说“没有清楚地认识到这个区别是程序错误和低效的常见源泉 !”说的好像是很严重,但是有没有见到它具体说它们之间的区别。希望高手能给具体的指导,谢谢了!
...全文
170 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
toadzw 2008-11-14
  • 打赏
  • 举报
回复
类成员列表中的那才叫初始化,而在函数体中的则就初始化
peter1_jiang 2008-11-13
  • 打赏
  • 举报
回复
c++作者也强调了初始化要比赋值的效率更高。初始化是对一个对象进行显示的初始化,而赋值是一个“隐式”的初始化,即赋值符号的左边的对象必须是已经初始化了的对象,才能进行赋值
jackzhhuang 2008-11-05
  • 打赏
  • 举报
回复
应该是两步:

1,初始化

2,赋值

如果用初始化列表效率会高点,因为少了赋值。
OenAuth.Core 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Nosky100 的回复:]
是不是说初始化就是调用构造函数。
赋值除过调用构造函数之外,还调用了重载的=操作符?
[/Quote]
赋值只调用了重载的=操作符
因为赋值只可能是下面情况
A a;
A b;
a=b;
如果你写成A a=b;那么它就是初始化,就只调用构造函数,其实A a=b;=>A a(b);这两个是一样的。这样你就容易明白了
hznat 2008-11-05
  • 打赏
  • 举报
回复
赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情 况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是 简单地复制类中的每个成员。
Nosky100 2008-11-05
  • 打赏
  • 举报
回复
是不是说初始化就是调用构造函数。
赋值除过调用构造函数之外,还调用了重载的=操作符?
OenAuth.Core 2008-11-05
  • 打赏
  • 举报
回复
在写程序的过程中其实很容易分清。你只要知道规律
初始化时肯定有类型在前面如 int a=10; 类A a=**这些都是初始化,而不是赋值。
赋值前没有类型,如a=10;
至于两者在效率等方面,LS已经说的差不多了
xhs_lh04 2008-11-05
  • 打赏
  • 举报
回复
因为如果赋值语句可能会调用两次该成员的构造函数,而初始化只会调用一次,一般而言,重复的函数调用是浪费资源的,尤其是当构造函数和赋值操作符分配内存的时候。在一些大的类里面,你可能拥有一个构造函数和一个赋值操作符都要调用同一个负责分配大量内存空间的Init函数。在这种情况下,你必须使用初始化列表,以避免不要的分配两次内存。
xhs_lh04 2008-11-05
  • 打赏
  • 举报
回复
因为初始化比赋值效率高

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧