繁体   English   中英

旁通引用功能参数

[英]Pass-By-Reference Function Parameter

我正在查看一些在教科书中阅读的代码以供自己测试运行,这是:

#include <iostream>
#include <fstream>
using namespace std;

const double PI = 3.1415926535897932;

void area_of_circle(const double R, double& L, double& A);

int main() {
  const int N = 10;
  double R[N];
  double area, perimeter;
  int i;

  for (i = 0; i < N; i++) {
    cout << "Enter radius of circle: ";
    cin >> R[i];
    cout << "i= " << (i+1) << " R(i)= " << R[i] << "\n";
  }

  ofstream myfile ("AREA.txt");
  for (i = 0; i < N; i++){
      area_of_circle(R[i], perimeter, area);
      myfile << (i+1) << ") R= " << R[i] << " perimeter= "
      << perimeter << "\n";
      myfile << (i+1) << ") R= " << R[i] << " area= "
      << area << "\n";
    }

    myfile.close();
}

void area_of_circle(const double R, double& L, double& A) {
  L = 2.0*PI*R;
  A = PI*R*R;
}

我所做的与作者所做的不同之处是未引用我的const double R参数。 他在area_of_circle函数中包含了&参考符号(const double&R)。 我运行了带有和不带有参考符号的代码,并且两者都得到了相同的结果。

本质上,我的问题是,如果两位作者都给出相同的答案,为什么还要包括它? 我之所以选择不包含它,是因为我的理解是,如果R在整个函数计算中都没有变化,那么为什么要包含它。

在您提供的示例中,使用或不使用带有R参数的引用在执行时间上并没有太大区别,因为参数很小(单双精度), 但是如果您将整个表作为副本传递(而不是引用),它可能会对程序执行时间有重大影响。

通过const引用传递不会导致内存复制。 它仅引用存储参数的内存。 const用于避免修改引用传递的参数。 如果将简单参数(如double)传递给函数,则不需要const ,因为您只能修改副本。

也检查一下这一点: C ++:参数传递“通过引用传递”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM