返回C ++参考变量VS返回变量

时间:2019-04-11 03:19:25

标签: c++

假设在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中返回指针进行比较)

3 个答案:

答案 0 :(得分:2)

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

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

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

#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;
}

答案 1 :(得分:1)

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

注意:声明的6数据为b,因此您没有打印任何参考。

答案 2 :(得分:1)

只要它不是本地声明的变量(可以从堆栈中删除),就可以通过引用返回。通过引用返回仅表示它不返回对象的副本,而是实际对象。