无返回值优化
以前写的随笔提到了不要返回局部变量的指针
但为什么黑马程序的视频中主函数第一次打印还能正常的输出呢。事实上在执行 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 }
结果为
标签:临时,return,int,Person,返回值,优化,指针 From: https://www.cnblogs.com/Sandals-little/p/16935600.html