常量引用和返回值

const reference and returned value

本文关键字:返回值 引用 常量      更新时间:2023-10-16

有代码

int test(){
   return 5;
}

int main(){
   const int & t = test();
   cout << &t << endl;
}

通过标准,我们可以将临时对象分配给常量和变量,并将它们的生命周期延长到常量和变量的生命周期。

这是否意味着 const & variable 在内存(内存地址)中与返回值(临时对象)具有相同的位置?

例如

如果我想从 func 返回值,它会被复制到寄存器中,然后分配给变量,这意味着内存位置不会相同,或者它是在堆栈上创建的,只是 const 和变量是内存中那个位置的别名?

还有为什么需要const,这只是c ++实现它的方式?

感谢您的回答。

int通常作为寄存器返回,因此编译器将创建一个新的临时来存储结果。

返回的对象可能没有存储,因此严格来说不一定是相同的地址

当您按值返回时,结果位于临时分配的堆栈变量中,或者可能是在简单类型的情况下,例如寄存器中的int(我想它是特定于编译器的)。

内部引用只不过是一个禁止被语言语法null的指针。

所以:返回的值是在堆栈上临时分配的,const &它也是指向临时变量的堆栈上的指针。