按引用传递函数参数

Pass-By-Reference Function Parameter

本文关键字:参数 传递函数 引用      更新时间:2023-10-16

我正在审查一些代码来为自己测试运行,我在教科书中读到,这里是:

#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 双 R 参数。他在area_of_circle函数中包含 & 参考符号 (const double&R(。我在有和没有参考符号的情况下运行代码,并且两者都收到了相同的结果。

基本上我的问题是,如果它们都产生相同的答案,为什么作者要包括它?我选择不包括它,因为我的理解是,如果 R 在整个函数计算过程中没有变化,为什么要包含它。

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

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

也检查一下这个: C++:参数传递"通过引用传递">