Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的引用调用是如何工作的+;?_C++_Pass By Reference - Fatal编程技术网

C++ c+中的引用调用是如何工作的+;?

C++ c+中的引用调用是如何工作的+;?,c++,pass-by-reference,C++,Pass By Reference,考虑以下功能原型: swap(int &a,int &b); “x”和“y”是主函数的两个局部整数。 假设控件位于main()函数中。 现在,当编译器遇到这种类型的语句时:swap(x,z) 引擎盖下面到底发生了什么(我的意思是,在内存位置方面)? 我的问题是:- 在swap()函数的堆栈中是否为a,b分配了内存?如果分配了内存,它将存储什么 通过引用调用是如何工作的 在swap()函数的堆栈中是否为a,b分配了内存?如果分配了内存,它将存储什么 首先,在调用 SavaPPTR

考虑以下功能原型:

swap(int &a,int &b);
“x”和“y”是主函数的两个局部整数。 假设控件位于main()函数中。 现在,当编译器遇到这种类型的语句时:
swap(x,z)
引擎盖下面到底发生了什么(我的意思是,在内存位置方面)?
我的问题是:-

  • 在swap()函数的堆栈中是否为a,b分配了内存?如果分配了内存,它将存储什么
  • 通过引用调用是如何工作的
  • 在swap()函数的堆栈中是否为a,b分配了内存?如果分配了内存,它将存储什么

    首先,在调用<代码> SavaPPTR(INT*A,INT*B)时,考虑同一问题的答案,假设堆栈用于传递参数,在调用<代码> SavaPPTR(&x,y)时,一些内存将被分配给<代码> A<代码>代码> B>代码>。该内存将保存指向

    x
    y
    的指针

    传递引用时也会发生同样的情况:在堆栈上分配一些内存来传递引用
    a
    b
    ,并使用对
    x
    y
    的引用进行初始化。这种内存通常具有与指针相同的布局,但标准并不要求这样做:用于传递引用的结构是特定于实现的且不透明的

    通过引用调用是如何工作的

    与按值调用的工作方式相同,只是编译器知道构造引用,而不是复制所传递的对象

    在swap()函数的堆栈中是否为a,b分配了内存?如果分配了内存,它将存储什么

    首先,在调用<代码> SavaPPTR(INT*A,INT*B)时,考虑同一问题的答案,假设堆栈用于传递参数,在调用<代码> SavaPPTR(&x,y)时,一些内存将被分配给<代码> A<代码>代码> B>代码>。该内存将保存指向

    x
    y
    的指针

    传递引用时也会发生同样的情况:在堆栈上分配一些内存来传递引用
    a
    b
    ,并使用对
    x
    y
    的引用进行初始化。这种内存通常具有与指针相同的布局,但标准并不要求这样做:用于传递引用的结构是特定于实现的且不透明的

    通过引用调用是如何工作的

    与按值调用的工作方式相同,只是编译器知道构造引用,而不是复制所传递的对象

  • swap()函数的堆栈中是否有为a,b分配的内存
  • 排除函数调用作为优化进行内联扩展的可能性:是的,将在调用堆栈上分配内存

    如果分配,它将存储什么

    可以用来访问引用对象的东西。实际上,使用引用对象的内存地址

  • swap()函数的堆栈中是否有为a,b分配的内存
  • 排除函数调用作为优化进行内联扩展的可能性:是的,将在调用堆栈上分配内存

    如果分配,它将存储什么

    可以用来访问引用对象的东西。实际上,使用引用对象的内存地址

  • 通过值传递时,会为对象分配堆栈内存。通过指针或引用传递时,堆栈上的内存仅分配给变量的指针/地址

  • 在语法中,通过引用调用与通过值调用类似。但是在引擎盖下有指针,所以在使用引用时可以使用
    虚拟
    函数进行动态调度

  • 通过值传递时,会为对象分配堆栈内存。通过指针或引用传递时,堆栈上的内存仅分配给变量的指针/地址

  • 在语法中,通过引用调用与通过值调用类似。但是在引擎盖下有指针,所以在使用引用时可以使用
    虚拟
    函数进行动态调度


  • 这里的基本答案是堆栈内存和堆内存之间的区别

    当您传递值时,您将值推送到堆栈上“传递值”堆栈上的一个空间被分配给该值(好处是它非常快!但是堆栈也受到系统的严格控制)

    当您通过引用时,您正在将指针传递给分配的内存对象,在系统和C++中,其中的一个地方将创建一个指针来指示堆中资源的最佳猜测。p> < >因为C++不能预料到参考资源的大小,因为程序运行到完成,它使用了在应用程序实例化时配置的垃圾存储器(是的嗡嗡词WEEEE)!(下一次,当有人说“炸了堆栈”时,他们错了,他们把堆栈炸了,哎呀!真的很难炸了堆栈,大部分时间内存都被限制了)

    关于这方面的伟大文章:


    干杯!不要长时间工作这对你不好:)

    这里的基本答案是堆栈内存和堆内存之间的区别

    当您传递值时,您将值推送到堆栈上“传递值”堆栈上的一个空间被分配给该值(好处是它非常快!但是堆栈也受到系统的严格控制)

    当您通过引用时,您正在将指针传递给分配的内存对象,在系统和C++中,其中的一个地方将创建一个指针来指示堆中资源的最佳猜测。p> <>因为C++不能预期参考资源在程序运行到完成时的大小,它使用在应用程序实例化时配置的垃圾存储器(是的嗡嗡单词WEEEE)