返回引用与返回值C++之间的差异

Sid*_*hou 2 c++ reference

关于为什么有必要从函数返回引用的问题.

以下代码行为完全相同,如果我们替换int&intline9和line16.

在我的示例代码中是真的,返回引用与值无关紧要吗?在什么样的例子中,它将开始重要?

在我看来,我们无法返回函数的局部变量的引用,因为局部变量将超出调用者的范围.因此,返回调用者可以看到的变量的引用(在范围内)才有意义,但是如果函数的调用者可以看到变量,那么它不需要返回(?)(或者这是返回的)是为了保持代码干净整洁?)

相关链接:返回引用是个好主意吗?

#include <iostream>
using namespace std;

class myClass{
private:
    int val;
public:
    myClass(int);
    int& GetVal();
};

myClass::myClass(int x){
    val = x;
}

int& myClass::GetVal(){
    return val;
}

int main()
{
    myClass myObj(666);
    cout << myObj.GetVal() << endl;
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 6

不同之处在于,当您返回引用时,您可以分配给结果GetVal():

myObj.GetVal() = 42;
Run Code Online (Sandbox Code Playgroud)

您还可以保留返回的引用,并在myObj.val以后使用它进行修改.

如果GetVal()要按val价值返回,这一切都不可能.

无论这些是否合乎需要,或者确实是好的设计,都是完全不同的问题.

请注意,您的示例与链接问题中的代码非常不同- 该代码返回无效引用,并且毫无疑问是个坏主意.