【问题标题】:Why Pass By Ref doesn't work [duplicate]为什么通过 Ref 不起作用[重复]
【发布时间】:2015-07-30 20:50:59
【问题描述】:

引用传递似乎不起作用。输出的第二行应该使用引用,而是输出与以前相同的内容。

double passByValue(double, double);
double passByRef(double&, double&);

int main(){    
    double firstNumber=0, secondNumber=0;
    char quit =' ';
    while (quit != 'y'){

        cout <<"Please enter your first number: ";
        cin >> firstNumber;

        cout << "\nPlease enter your second number: ";
        cin >> secondNumber;

        cout <<firstNumber <<"\t" << secondNumber << "\t" << passByValue(firstNumber, secondNumber)<<endl;
        cout <<firstNumber <<"\t" << secondNumber << "\t" << passByRef(firstNumber ,secondNumber )<<endl;

        cout <<"Do you want to quit? y/n";
        cin >> quit;
    }
}

double passByValue(double first, double second){
    first +=5;
    second +=5;
    double sum =first + second;
    return sum;
}

double passByRef(double &a, double &b){
    a +=5;
    b +=5;
    double sum = a + b;
    return sum;
}

【问题讨论】:

  • 为什么您认为在这种情况下通过引用传递会改变输出? (它可能会这样做,但可能不是因为你想的原因)
  • 这不是检查引用传递是否“有效”的最佳方法。
  • 查看值传递和引用传递区别的方法是在每次调用之后打印firstNumbersecondNumber的值。
  • 您假设&lt;&lt; 运算符的参数是按特定顺序计算的。它们不是,因此您不知道是在函数调用之前还是之后打印值。
  • @Slava:那是完全不同的情况。这里有一个更好的例子:func1(func2()).func3(func4()); -- 然后问,func4() 可以在func2() 之前执行吗?答案是肯定的,可以,但是func3()不能在func1()之前执行。

标签: c++ pass-by-reference


【解决方案1】:

试试这个:

double sum = passByValue(firstNumber, secondNumber);
cout << firstNumber <<"\t" << secondNumber << "\t" << sum <<endl;
sum = passByRef(firstNumber, secondNumber);
cout << firstNumber <<"\t" << secondNumber << "\t" << sum <<endl;

这可确保您看到由于调用函数而对 firstNumbersecondNumber 所做的更改。

【讨论】:

    【解决方案2】:

    代码正确,但您的解释不正确。
    尝试在调用passByReference 后显示firstNumbersecondNumber,你应该得到:

    0 0 10 0 0 10 5 5

    问题是,当你调用 passByValue 时,这些行

    first +=5;
    second +=5;
    

    实际上并没有增加 firstNumbersecondNumberfirstsecond 是副本。
    另一方面,当您通过引用传递时,它们不是 5。

    【讨论】:

      猜你喜欢
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2015-07-06
      相关资源
      最近更新 更多