C++这个复制构造函数,怎么调用了2次呢

2025-03-10 09:20:48
推荐回答(1个)
回答1:

来分析一下你的程序运行情况。。

从main()开始,

第一行
A
&
u
=ss();

首先调用
ss()函数,在函数里面定义了一个变量w,调用的是2个参数的构造函数。

然后返回,看看返回类型,是A,是属于值传递,

恰好你做了一个复制构造函数

而你需要的是A&
所以编译器会做无关紧要的转换,把A
转换成A&
这样就开始了

第一个
A(A
&
i)

然后主函数里面是
A
&
u
=
又一次调用复制构造函数。

然后u就
引用了ss
里面生成的值,但是在赋值完成的时候,ss函数就会消亡掉。

在ss里面的变量的生存期已经没了,

所以呢u引用的内存里面是没有东西或者被更改了。