函数返回临时对象的问题

dinko321 dinko321 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如下一段代码:

class A;

A func()
{
A a;
return a;
}

int main()
{
A *a = &func(); // s1
A &a = func(); // s2
return 0;
}


一、
在我之前的理解中,函数func返回值,是在调用处的作用域生成的一个临时值,所以对其取地址没错(s1)。
s2同理。
但是昨天,又遇到另外个人,说这个写法不对。
测试之后发现,VS2010无问题,codeBlocks编译不过,说指针指向了临时变量。codeBlocks应该是GCC的。

二、
但是如果用容器,诸如vector之类的,就又不会报错。
我之前的理解中,我一直觉得容器返回的对象,应该就是func中的形式。


求解个中原委。
...全文

相关推荐

c++的一些问题-无名临时对象的析构问题

无名临时对象的析构问题 值返回函数,若返回对象temp,则先利用拷贝构造函数将返回的对象拷贝到临时对象ob中,再将temp析构,而ob的析构时间是执行完调用这个函数的语句 如下面这段代码 class ctest { public: ctest(int x=0):a(x){ cout<<"构造对象("<<a<<")\n"; } ctest...

神奇的DW

对C++临时对象的内存位置的研究

首先,这是一个很少有人研究的问题:C++的临时对象是在堆里还是在栈里的。 但若不研究清楚内部原理,每次产生临时量时都会纠结于此, 网上能找到的资料也都是new在堆里、定义在函数内部就是栈里,或者是临时量通过复制构造函数构造这种废话。。。 所以自己研究了一下…… 首先,运算中的临时对象显然是栈内的, 对于参数上的临时对象,我推测是直接push进去的,应该也在栈内, 但是返回值上的

nullptr__

国央企创新负责人如何构建多维度的科技资源评价与配置体系?.docx

国央企创新负责人如何构建多维度的科技资源评价与配置体系?

BIZKEEN

《移动通信系统》全套PPT课件2026(西安电子科技大学)

《移动通信系统》全套PPT课件2026(西安电子科技大学)

书阁酷

Python3 json序列化常见报错

json只能序列化字符串、数字、列表、字典、布尔、空值。无法序列化datetime、bytes、自定义类对象,直接dumps会抛出类型错误。解决方案:自定义序列化函数,通过default参数传入,手动转换特殊对象。中文乱码:默认ensure_ascii=True会转义中文,改为False直接输出原生中文。反序列化loads注意:json字符串要求双引号,Python字典单引号字符串无法解析,需要提前替换引号。 lxwuhua.cn mayawalkermx.com mccia.com.cn lzsxgqscgs.com mftug.com

2601_97326425
评论 41
收藏 已收藏
分享
返回顶部
dinko321
C++ 语言 65,214 成员 250,514 内容