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

2025-04-05 21:29:38
推荐回答(2个)
回答1:

yili16438 那个解释不对。

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

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

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

回答2:

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