首页 > 解决方案 > 返回 C++ 引用变量 VS 返回变量

问题描述

假设 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&to更改int,编译器不会抱怨,它仍然会打印 6。那么在 C++ 中重新调整引用是如何工作的?(将其与在 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;
}

推荐阅读