【发布时间】:2012-03-06 15:34:23
【问题描述】:
例如这个函数 f 定义如下:
int f(int x){return x;}
如您所知,您不能为此临时 int 分配引用:
int& rf=f(2);// this will give an error
但是如果我像这样重新定义我的函数 f:
int& f(int x){return x;}
f(2);// so now f(2) is a reference of x, which has been destroyed
所以我的问题是:编译器如何不让您创建对将在声明后销毁的临时文件的引用(第一种情况)。另一方面,它允许您创建对x 的引用 f(2),而编译器知道这个引用将在return 之后被销毁。
【问题讨论】:
-
这是 UB(好吧,无论如何都要访问参考),任何理智的编译器都会警告你。