const引用和返回值

时间:2017-10-27 16:19:21

标签: c++ c++11 reference return-value

有代码

int test(){
   return 5;
}

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

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

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

E.g

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

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

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

当按值返回时,结果位于临时分配的堆栈变量中,或者可能是寄存器中的int之类的简单类型(我认为它是特定于编译器的)。

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

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