C++ 对象的初始化和赋值的区别

来源:百度知道 编辑:UC知道 时间:2024/06/15 18:55:18
在C++中,为什么对象的初始化(将一个对象赋值给另一个对象)需要复制构造函数,而对象的赋值却不用,对象的初始化和赋值究竟有什么区别?
比如有一个类:class student,而且已有一个对象 stu1;
student stu2=stu1; 我觉得程序做了3件事:
这时,就调用了 复制构造函数 ,
1.调用默认构造函数 student stu2();
2.调用 复制构造函数
3.赋值
不知对不对?

yili16438 那个解释不对。

整个表达式只做了一件事情就是调用复制构造函数, 没有默认构造也没有赋值。 student stu2=stu1; 等价于括号的写法 student stu2(stu1);

声明语句中的=和表达式中的=完全是两个语法功能, 不能混为一谈

要说差别, 如果你把这些东西都当作函数来看那么区别就是很明确的: 它们调用的函数不一样。 按语法来看, 各种构造只发生在对象产生的时候, operator=只发生在对象产生之后。

第二步并不是调用复制构造函数,而是调用重载=运算符函数
C++之父建议我们这样初始化
student stu2(stu1); //这才是复制构造函数