C++引用和引用参数

C++ references and references parameters

本文关键字:引用 参数 C++      更新时间:2023-10-16

请查看下面的代码片段 - 我已经声明了 3 个函数(即 1 个传递 int,其他函数传递对 int 的引用)。执行程序后,我发现调用函数(tripleByReference)后"count"变量的值没有改变以反映其三元组(count仍然等于5)。但是,调用函数(tripleByReferenceVoid)会修改变量,但这是由于变量(计数)直接发生了更改。

我知道通过引用传递,调用方使被调用函数能够直接访问调用者的数据并对其进行修改,但这无法通过将变量传递给函数(tripleByReference)来实现 - 请帮助我理解这一点。

#include <iostream>
using namespace std;
/* function Prototypes */
int tripleByValue(int);
int tripleByReference(int &);
void tripleByReferenceVoid(int &);
int main(void)
{
    int count = 5;
    //call by value
    cout << "Value of count before passing by value is: " << count << endl;
    cout << "Passing " << count << " by value, output is: "
         << tripleByValue(count) << endl;
    cout << "Value of count after passing by value is: " << count << endl;
    //call by reference - using int tripleByReference
    cout << "nnValue of count before passing by reference is: " << count << endl;
    cout << "Passing " << count << " by reference, output is: " 
         << tripleByReference(count) << endl;
    cout << "Value of count after passing by reference is: " << count << endl;
     //call by reference - using void tripleByReference
     tripleByReferenceVoid(count);
     cout << "nnValue of count after passing by reference is: " << count << endl;
    cout << endl;
    system("PAUSE");
    return 0;
}//end main
int tripleByValue (int count) {
    int result = count * count * count;
    return result; 
}//end tirpleByValue function
int tripleByReference(int &count) {
     int result = count * count * count;
     return result; //perform calcs     
}//end tripleByReference function
void tripleByReferenceVoid(int &count) {
     count *= count * count;
}//end tripleByReference function

谢谢。

tripleByReference不会

更改count的值,因为您永远不会分配给它。而是返回值。

tripleByReferenceVoid是不同的。您正在分配给它(count *= ...),这就是反映这些更改的原因。

在你的函数tripleByReference中,你甚至没有尝试修改count的值,而在函数tripleByReferenceVoid中,你显式修改count。因此,显而易见的预期效果:后一个函数修改count,前者不修改。也就是说,这些函数完全按照你明确和有意识地要求它们做的事情。

像这样的问题很难回答,因为几乎不可能理解是什么让你问它。您似乎对这两个函数的行为不同这一事实感到困惑。但是,当您自己明确地将它们写成在特定方面有所不同时,为什么会让您感到困惑?