【发布时间】:2020-12-24 10:36:27
【问题描述】:
我做了以下例子来测试我对引用的理解:
#include <iostream>
int test(){
int a = 1;
int &b = a;
return b;
}
int main(int argc, const char * argv[]) {
std::cout << test() << std::endl;
}
我打算做的是写一个引用变量被销毁的例子。我最初写这个的想法是,由于test 中的a 的生命周期在test 中返回b 时结束,所以输出test 的返回值会产生乱码。然而,令我大吃一惊的是,它实际上输出了 1!
这怎么可能?我在这里错过了什么 - a 可以以某种方式继续生活在 b 中吗?
【问题讨论】:
-
你的函数返回一个值而不是一个引用
-
顺便说一句,即使您使用无效的引用,您也无法区分乱码 1 和非乱码 1
-
通常很难避免 U.B.而不是介绍 U.B.但无论如何:demo on coliru
-
a和b都不存在。您的函数返回a中值的副本。在您了解(默认情况下)函数的返回值是副本而不是引用之前,您似乎正在尝试理解引用。如果您希望test真正返回引用,那么int& test()。
标签: c++ scope reference return-type function-definition