值方式返回局部对象没调用拷贝构造函数?

正在学习拷贝构造函数的调用时机
有一条是当值方式返回局部对象会调用拷贝构造函数
跟着打了示例代码,但是和应该出现的运行结果不一致

img


为什么这并没有调用拷贝构造函数?并且从地址上来看,p1和p似乎是同一个对象?是这样的么?

百度拷贝消除 ,RVO 和 NRVO

Person p = doWork2();
拆开写成:Person p; p = doWork2();
应该就会调用拷贝构造函数了