返回一个C++引用变量 VS 返回一个变量

Returning a C++ reference variable VS returning a variable

本文关键字:一个 变量 返回 VS C++ 引用      更新时间:2023-10-16

假设C++中的以下函数:

#include <iostream>
int& change(int& a){
   a = 6;
   return a;
}
int main(){
   int a = 5;
   int b = change(a);
   std::cout << b << std::endl;
   return 0;
}

运行此操作将返回:

6

我的问题是,如果我将返回类型从 int& 更改为 int,编译器不会抱怨,它仍然会打印 6。那么,在C++中如何重新调整引用呢?(将其与在 C 中返回指针进行比较(

引用,就像指针一样,是通过存储对象的地址来实现的。

按值返回意味着它返回旧对象的副本。

按引用返回意味着它返回旧对象的地址。

#include <iostream>
int& change_ref(int& a) {
    a = 6;
    return a;
}
int change_value(int& a) {
    a = 6;
    return a;
}
int main() {
    int a = 5;
    change_ref(a) = 7;
    // change_value(a) = 7; compile error
    std::cout << a << std::endl;
    int& a1 = change_ref(a); // return reference of a
    // now a1 ref the a
    a1 = 10;
    // print a = 10 and a1 = 10
    std::cout << a << " " << a1 << std::endl;
    int a2 = change_value(a); // return a value of a, so return is 6
    // value of a is 6 and define a new value a2
    a2 = 11;
    // set a2 to 11 and not change a
    // print a = 6, a1=6, a2= 11
    std::cout << a << " " << a1 << " " << a2 << std::endl;
    return 0;
}

只要它不是本地声明的变量,您就可以通过引用返回(因为它们将从堆栈中删除(。通过引用返回仅意味着它不是返回对象的副本,而是返回实际对象。

您正在通过引用调用函数change(),然后将 a 的实际值更新为 6。由于 a 的值更新为 6,因此无论返回类型如何,a都将携带更新的值,并始终在给定的示例中打印6

注意:b的声明数据是int的,因此您不会打印任何参考。