在C++中因为是临时复制对象来传值所以是可以返回局部对象的。
在返回局部对像的时候,会先复制一个临时对象进行返回。
下面是测试代码
#include <stdio.h>
class test
{
public:
int val;
};
test gettest()
{
test part;
part.val = 99;
printf("part:%d,[%p]\n", part.val, &part);
return part;
}
int main()
{
test res;
res = gettest();
printf("res:%d,[%p]\n", res.val, &res);
test *ptmp = &gettest();
printf("ptmp:%d,[%p]\n",ptmp->val, ptmp);
return 0;
}
编译时候会warnning:这是因为用指针把临时的地址保存了的缘故。
test.cpp:20: warning: taking address of temporary
输出结果:
part:99,[0x28ac24]
res:99,[0x28ac64]
part:99,[0x28ac24]
ptmp:99,[0x28ac58] 注意,这里的地址和局部变量的地址是不一样的,因为是临时复制了一个对象进行返回