常量引用和返回值
const reference and returned value
有代码
int test(){
return 5;
}
和
int main(){
const int & t = test();
cout << &t << endl;
}
通过标准,我们可以将临时对象分配给常量和变量,并将它们的生命周期延长到常量和变量的生命周期。
这是否意味着 const & variable 在内存(内存地址)中与返回值(临时对象)具有相同的位置?
例如
如果我想从 func 返回值,它会被复制到寄存器中,然后分配给变量,这意味着内存位置不会相同,或者它是在堆栈上创建的,只是 const 和变量是内存中那个位置的别名?
还有为什么需要const
,这只是c ++实现它的方式?
感谢您的回答。
int
通常作为寄存器返回,因此编译器将创建一个新的临时来存储结果。
返回的对象可能没有存储,因此严格来说不一定是相同的地址
当您按值返回时,结果位于临时分配的堆栈变量中,或者可能是在简单类型的情况下,例如寄存器中的int
(我想它是特定于编译器的)。
内部引用只不过是一个禁止被语言语法null
的指针。
所以:返回的值是在堆栈上临时分配的,const &
它也是指向临时变量的堆栈上的指针。
相关文章:
- 将值分配给从函数返回的右值引用
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 将返回类型专用化为 void 或 const 左值引用
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 可以返回右值引用吗?
- 普通的右值引用和 std::forward 返回的引用有什么区别?
- 我可以从取消引用"new"的返回值初始化引用吗
- C++ std::map 的返回值引用
- 按值与右值引用返回
- 为什么我不能将常量左值引用绑定到返回 T&&&的函数?
- 通过引用将函数传递给 TBB 任务时无法返回值
- 了解返回时的右值引用
- 为什么作为返回类型的右值引用不能初始化非常量引用?
- 这安全吗?右值和引用返回值
- 如果函数的返回值将用作右值引用而不是左值,有没有办法使函数具有不同的行为?
- 动态指针引用数组由三元运算符返回值,但有异常
- std::move 返回值 weak_ptr::锁定弄乱了shared_ptr的引用计数?
- 从 r 值引用限定方法返回 r 值引用是否是一种好的做法?
- 返回值(引用、指针和对象)
- 从函数返回值:引用vs结构