【发布时间】:2012-03-06 02:23:27
【问题描述】:
如果我调用函数 f(3);,我想知道编译器如何保存这个临时 int;
int f (int x) { return x; }
以及编译器将如何执行此操作:
int a=f(3);
是不是就像做 int a=x; (我知道 x 已经被销毁了)或者它确实创建了一个名为 f(3) 的临时变量,例如 int f(3)=x;
int& a=f(3);
为什么这不起作用?
【问题讨论】:
-
您是在问优化编译器将如何处理此特定代码,还是关于一般机制?
-
你不能做
int& a=f(3),因为函数f返回一个整数并且你将它分配给一个整数的引用(int&)。 -
@prelic :将整数分配给对整数的引用是完全有效的。无效的是将临时分配给引用。
-
@MatthewFlaschen 我在说一般。
-
这是一个不能取地址的变量,因为它会在语句返回后被销毁(为了简化)。如果您想将其永久存储在某处(即复制它),则需要对其进行一些存储。顾名思义,引用只是一个名称,因此您不能将函数的返回值绑定到引用。 (你可以使用 const 引用,但这可能会引发崩溃,不要这样做)。