我们都清楚C++中引用的本质其实是一个指针常量,引用的一些基本知识就不再赘述。这里我们将引用作为函数的返回值来讨论一下。
引用作为函数的返回值主要注意两个点:1、函数内部不能返回局部变量的引用;2、函数的调用可以作为左值存在。以下我们通过几个案例来说明这两个点。
案例一:函数内部不能返回局部变量的引用。
#include <iostream> using namespace std; int& mytest1() { int a = 10; return a; } int& mytest2() { static int a = 10; return a; } int main() { // 本质是 int * const t1 = mytest1(); t1本质是一个指针常量,所以只能指向初始化的地址。 int &t1 = mytest1(); int &t2 = mytest2(); cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl; cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl; cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl; cout<< "&t2 : " << &t2 << "\tt2 : " << t2 << endl; cout<< "&t2 : " << &t2 << "\tt2 : " << t2 << endl; cout<< "&t2 : " << &t2 << "\tt2 : " << t2 << endl; return 0; }
执行结果如下:
根据上图的执行结果可知:当我们返回局部变量的引用时,由于函数的局部变量是在栈空间申请,函数执行完之后变量的空间就会被释放,编译器会保留一次值,第二次用会出错。而静态成员变量是在全局区申请的,程序执行完才会释放,所以引用可以返回被正常使用。
案例二:函数的调用可以作为左值存在。
#include <iostream> using namespace std; int& mytest() { static int a = 10; return a; } int main() { int &t1 = mytest(); cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl; // 函数作为左值 mytest() = 1234; cout<< "&t1 : " << &t1 << "\tt1 : " << t1 << endl; return 0; }
执行结果如下:
根据上图的执行结果可知:我们可以通过把函数作为左值来修改其返回值引用的值。
C++引用作为函数的返回值
最新推荐文章于 2024-05-10 16:19:52 发布