C++ 返回对int的引用与在c++;功能?

C++ 返回对int的引用与在c++;功能?,c++,reference,return-type,C++,Reference,Return Type,我的部分问题已经被另一个问题回答了,但我还是有点困惑。所以我知道这会返回一个引用,而不是地址。但是这个定义的优点是什么,你只是返回c,为什么不将它定义为: int& returnC() { return c; } 如果它们都返回同一个变量,那么返回对int而不仅仅是int的引用有什么好处 如果我这样声明会发生什么: int returnC() { return c; } 谢谢大家! 按值返回 按值返回是最简单、最安全的返回类型。通过value返回值时,该值的副本将返回

我的部分问题已经被另一个问题回答了,但我还是有点困惑。所以我知道这会返回一个引用,而不是地址。但是这个定义的优点是什么,你只是返回c,为什么不将它定义为:

int& returnC() {
    return c;
}
如果它们都返回同一个变量,那么返回对int而不仅仅是int的引用有什么好处

如果我这样声明会发生什么:

int returnC() {
    return c;
}

谢谢大家!

按值返回

按值返回是最简单、最安全的返回类型。通过value返回值时,该值的副本将返回给调用方。 例如:

参照返回

与通过引用传递一样,通过引用返回的值必须是变量(不能返回对文本或表达式的引用)。当通过引用返回变量时,对该变量的引用将传递回调用方。然后调用方可以使用此引用继续修改变量,这有时会很有用通过引用返回也很快,这在返回结构和类时非常有用。 例如:

//此结构包含25个整数的数组
结构MyArray
{
int值[25];
};
//返回对rArray的nIndex元素的引用
int和Value(MyArrays和rArray,int-nIndex)
{
返回rArray.ArrValue[nIndex];
}
int main()
{
Myjarray;
//将objArray的第10个元素的值设置为5
值(objArray,10)=5;

cout按值返回

按值返回是使用的最简单和最安全的返回类型。按值返回值时,将向调用方返回该值的副本。 例如:

参照返回

与通过引用传递一样,通过引用返回的值必须是变量(不能返回对文本或表达式的引用)。当通过引用返回变量时,对该变量的引用将传递回调用者。然后调用者可以使用此引用继续修改该变量,这有时很有用。通过引用返回也很快,在返回结构和类时很有用。 例如:

//此结构包含25个整数的数组
结构MyArray
{
int值[25];
};
//返回对rArray的nIndex元素的引用
int和Value(MyArrays和rArray,int-nIndex)
{
返回rArray.ArrValue[nIndex];
}
int main()
{
Myjarray;
//将objArray的第10个元素的值设置为5
值(objArray,10)=5;

cout按值返回

按值返回是使用的最简单和最安全的返回类型。按值返回值时,将向调用方返回该值的副本。 例如:

参照返回

与通过引用传递一样,通过引用返回的值必须是变量(不能返回对文本或表达式的引用)。当通过引用返回变量时,对该变量的引用将传递回调用者。然后调用者可以使用此引用继续修改该变量,这有时很有用。通过引用返回也很快,在返回结构和类时很有用。 例如:

//此结构包含25个整数的数组
结构MyArray
{
int值[25];
};
//返回对rArray的nIndex元素的引用
int和Value(MyArrays和rArray,int-nIndex)
{
返回rArray.ArrValue[nIndex];
}
int main()
{
Myjarray;
//将objArray的第10个元素的值设置为5
值(objArray,10)=5;

cout按值返回

按值返回是使用的最简单和最安全的返回类型。按值返回值时,将向调用方返回该值的副本。 例如:

参照返回

与通过引用传递一样,通过引用返回的值必须是变量(不能返回对文本或表达式的引用)。当通过引用返回变量时,对该变量的引用将传递回调用者。然后调用者可以使用此引用继续修改该变量,这有时很有用。通过引用返回也很快,在返回结构和类时很有用。 例如:

//此结构包含25个整数的数组
结构MyArray
{
int值[25];
};
//返回对rArray的nIndex元素的引用
int和Value(MyArrays和rArray,int-nIndex)
{
返回rArray.ArrValue[nIndex];
}
int main()
{
Myjarray;
//将objArray的第10个元素的值设置为5
值(objArray,10)=5;

对于第一个版本,cout:

// This struct holds an array of 25 integers
struct MyArrays
{
    int ArrValue[25];
};


// Returns a reference to the nIndex element of rArray
int& Value(MyArrays &rArray, int nIndex)
{
    return rArray.ArrValue[nIndex];
}

int main()
{
    MyArrays objArray;

    // Set the 10th element of objArray to the value 5
    Value(objArray, 10) = 5;

    cout << objArray.ArrValue[10] << endl;
    return 0;
}
您只是返回c的一个副本。调用方可以用这个副本做任何他们想做的事情,它永远不会影响s

对于第二个版本(不需要使用c的地址):

调用方将能够写入

int& returnC() {
    return c;
}
并将成员c设置为5。我假设c是一个类的数据成员,因为我看不到它在任何地方被定义。如果c不是一个类的数据成员,那么你将返回一个临时的引用,当returnC的调用方试图使用它时,它将不存在,应该避免


要返回int,我可能会使用按值返回。除非我希望调用方能够更改c,否则这会泄露实现细节,通常被认为是不好的做法。如果我想返回一个对象,我可以通过const引用来执行此操作。这样可以避免复制类,而不给调用方更改对象的能力。如果调用方需要更改对象,然后我们将返回第一个版本的值返回:

// This struct holds an array of 25 integers
struct MyArrays
{
    int ArrValue[25];
};


// Returns a reference to the nIndex element of rArray
int& Value(MyArrays &rArray, int nIndex)
{
    return rArray.ArrValue[nIndex];
}

int main()
{
    MyArrays objArray;

    // Set the 10th element of objArray to the value 5
    Value(objArray, 10) = 5;

    cout << objArray.ArrValue[10] << endl;
    return 0;
}
您只是返回c的一个副本。调用方可以用这个副本做任何他们想做的事情,它永远不会影响s

对于第二个版本(不需要使用c的地址):

打电话的人可能是b
int returnC() {
    return c;
}
int& returnC() {
    return c;
}
returnC() = 5
int& max(int &x, int &y){
    if (x > y){
        return x;
    }

    return y;
}

int main(){
    int x = 10, y = 12;

    //This sets, y to 0.
    max(x, y) = 0;
}