首页 > 编程语言 >c++ return

c++ return

时间:2023-01-21 10:56:51浏览次数:51  
标签:return 变量 int c++ eax 析构 拷贝

return本是上是一个拷贝过程,不过是右值拷贝,也就是无标记变量的拷贝。

不管是返回指针还是返回值,return首先将要return的值存到eax寄存器中,回到父函数再将返回的值赋给变量

int A{return 0;}

int main()

{

  int i = A;

}

其实是先将0放入eax寄存器中,然后在回到主函数的时候 int i = eax(0);,之后将eax中的值清除,完成return过程

 

不只是return,其他的函数传值,比如foo(A a)也是一样的,都是拷贝过程,只不过foo(A a)的拷贝过程是A a = b,他们都是调用的拷贝构造函数。

在main的栈上事先开辟了一个临时空间,把这个空间的地址隐式的转到foo函数栈上。然后,把a内的东西,拷贝到临时空间中。 所以发生一次构造,一次拷贝,两次析构

临时空间中对象生成与销毁时会调用一次构造和一次析构,a = b的时候发生一次拷贝,a使用结束后再次析构。也就是一次函数传参实际上涉及了三个变量,主函数的变量b,临时空间的变量,函数参数变量a

标签:return,变量,int,c++,eax,析构,拷贝
From: https://www.cnblogs.com/uestc-du/p/17063655.html

相关文章

  • 关于海明码的问题(语言-c++)
    提问:   我头都大了,想了半天也没想出这个括号里面是怎么算出来的,有明白的吗,请赐教下。解答: 以下是一个C++编程实现海明码的示例:#include<iostream>#include<strin......
  • 【c++】高斯-约旦法求逆矩阵
    给出n阶方阵A,求解其逆矩阵A-1的方法:1.构造n×2n的矩阵(A,I)2.用高斯-约旦消元法将其化简为(I,A-1),即可得到A的逆矩阵A-1第一版的代码:voidinverse(doubleA[N][N]......
  • CUDA C++编程
    核函数作用调用核函数的时候,代码会被N个CUDA线程执行N次。 修饰符__global__返回值函数名(){  ...执行代码} 调用函数名<<<BlockNumber,ThreadNumber>>>()......
  • 史上最简单 OpenCV for C++ 在 Windows 和 Ubuntu 上编译安装使用教程
    准备工作原材料Ubuntu系统(非必须,Windows也可以,主要是Ubuntu适合编译)OpenCV3.4.1压缩包OpenCVcontrib3.4.1压缩包MinGW(Windows上运行GCC)版本信息......
  • 把KMP算法嚼碎了才利于消化!(C++)
    相信不少人在学数据结构的时候都被KMP算法搞的迷迷糊糊的,原理看的似懂非懂,代码写不出来,或者写出来了也不知道为什么就可以这么写。本文力求尽可能通俗详细的讲解KMP算法,让......
  • C++概述
    计算两个整数相加之和#include<iostream>usingnamespacestd;/*函数功能:计算两个整数相加之和*/intAdd(inta,intb){return(a+b);}//主函数intmai......
  • c++ namespace
    名字空间:名字空间有两个特征:1.顺序2.嵌套顺序:编译器和解释器相当于一个翻译官,拿着本子一行一行读代码,只有见过的名字才会记到本子上,每见过的名字他就不认识(所以C++需......
  • C#调用C++动态链接库dll之P/Invoke方式 — 1.无参无返回值函数调用
    1.新建一个C++空项目CPPTest2.新建一个PInvokeTest.cpp文件,并写下如下代码需要注意:下文中的两个函数名HelloWorld需要完全一致,只有这样才能确保被完全声明为一个其......
  • C++ Templates 中文版 电子书 pdf
    本书是C++模板编程的完全指南,旨在通过基本概念、常用技巧和应用实例3方面的有用资料,为读者打下C++模板知识的坚实基础。关注公众号:后厂村搬砖工。发送:电子书即可。......
  • C++ 基础语法2
    #include<iostream>usingnamespacestd;#include<string>#include<time.h>//结构体定义//structStudent//{//stringname;//intage;//intcount;//};//在结构体尾......