传递参考功能参数

时间:2018-03-09 06:36:38

标签: c++ reference pass-by-reference

我正在审查一些代码,为我自己测试我在教科书中读到的内容,现在是:

#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参数。他包括&amp; area_of_circle函数中的参考符号(const double&amp; R)。我运行代码尝试使用和不使用参考符号,我收到了相同的结果。

基本上我的问题是,如果这两位作者都得出相同的答案,那么为什么这个作者会包含它呢?我选择不包括它,因为我的理解是为什么包括它,如果R在整个函数计算中没有改变。

1 个答案:

答案 0 :(得分:2)

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

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

也请检查一下:C++: Argument Passing "passed by reference"