无返回值优化

以前写的随笔提到了不要返回局部变量的指针

 

 但为什么黑马程序的视频中主函数第一次打印还能正常的输出呢。事实上在执行 return 语句时系统是在内部自动创建了一个临时变量,然后将 return 要返回的那个值赋给这个临时变量。所以当被调函数运行结束后 return 后面的返回值真的就被释放掉了,最后是通过这个临时变量将值返回给主调函数的。因此上面的程序在执行return语句时创建了一个临时指针,临时指针将地址传给了主函数的指针p,指针p指向a的地址,第一次就可以打印出来,但是随即该地址被释放了,第二次就打印不出来。

再来看一个析构函数的例子

 

这里临时创建了一个p' ,test03中Person p=doWork2();相当于Person p=p'是一个隐式写法的拷贝构造

返回值优化

vs2022使用了返回值优化,则就不存在所谓的临时变量则

 1 int* test03()
 2 {
 3     int a;
 4     return &a;
 5 }
 6 int main()
 7 {
 8     int* b = test03();
 9     cout << *b << endl;
10     cout << *b << endl;
11 }

打印结果为

 

 

 1 Person test01()
 2 {
 3     Person p1;
 4     return p1;
 5 }
 6 void test02()
 7 {
 8     Person p = test01();
 9 }
10 
11 int main()
12 {
13     test02();
14 }

结果为

 

posted on 2022-11-29 15:51  小凉拖  阅读(95)  评论(0)    收藏  举报