yili16438 那个解释不对。
整个表达式只做了一件事情就是调用复制构造函数, 没有默认构造也没有赋值。 student stu2=stu1; 等价于括号的写法 student stu2(stu1);
声明语句中的=和表达式中的=完全是两个语法功能, 不能混为一谈
要说差别, 如果你把这些东西都当作函数来看那么区别就是很明确的: 它们调用的函数不一样。 按语法来看, 各种构造只发生在对象产生的时候, operator=只发生在对象产生之后。
第二步并不是调用复制构造函数,而是调用重载=运算符函数
C++之父建议我们这样初始化
student stu2(stu1); //这才是复制构造函数