【发布时间】: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;
}
【问题讨论】:
-
为什么您认为在这种情况下通过引用传递会改变输出? (它可能会这样做,但可能不是因为你想的原因)
-
这不是检查引用传递是否“有效”的最佳方法。
-
查看值传递和引用传递区别的方法是在每次调用之后打印
firstNumber和secondNumber的值。 -
您假设
<<运算符的参数是按特定顺序计算的。它们不是,因此您不知道是在函数调用之前还是之后打印值。 -
@Slava:那是完全不同的情况。这里有一个更好的例子:
func1(func2()).func3(func4());-- 然后问,func4()可以在func2()之前执行吗?答案是肯定的,可以,但是func3()不能在func1()之前执行。
标签: c++ pass-by-reference