如下一段代码:
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中的形式。 |