自理解并区分临时对象,局部变量,栈上对象等概念

本文介绍了C++中临时对象、栈上对象和局部变量的概念。临时对象通常不可取地址,存在于CPU寄存器中,如函数返回值。栈上对象在函数调用时创建,生命周期随函数结束而结束。局部变量是函数内部的栈上对象。文章通过代码示例阐述了返回栈上对象和临时对象的区别,并强调了不能返回栈上对象引用的原因。
摘要由CSDN通过智能技术生成

在学习C++的过程中,经常遇到这样几个概念:临时对象,局部变量,栈上对象等等,相信有不少人对此的理解是有点模糊的,只知其一不知其二。刚刚自己悟到了这个点,来说明一下。

1.临时对象、栈上对象

以一个示例引入:

//代码1
Point3D convert(Point2D & d2)
{
    return Point3D(d2); //Point3D(d2)为一个临时对象,将其返回
}

该函数返回一个临时对象,临时对象在哪里呢?是不是在栈上呢?

在我的学习中,是这样的:临时对象,通常是不可以取地址的对象,即CPU中计算产生的中间变量,通常称为右值。常见的临时对象有常量,表达式,函数返回值,等等。

同时有一种专门创建临时对象的写法,格式:类型(值);,如int(5);,A(10);//这里的A为一个类。

临时对象,创建在CPU寄存器上,不会在内存中占空间,因而也不能够取地址(只有内存才有地址编址)。所以临时对象并不是栈上对象——临时对象存在CPU寄存器中,怎么可能跑到栈区呢!

那么上面的代码如何理解呢?不妨再看一个类似的代码:

//代码2
Complex operator&
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值