这个函数返回什么样的对象

What kind of of object does this function return?

本文关键字:对象 什么样 返回 函数      更新时间:2023-10-16

想象一下你有这样的情况:

class  className{
...
}
className func(){
className cl;
...
return cl;     
}
int main(){
...
func();
}

当您在程序主体中调用函数func()时,它会返回什么?对象cl的临时副本?我不理解这一点,因为在函数func()的主体中,你可以获得地址&cl,但如果你试图在函数main()中调用&(func()),就会出现错误。

在函数内部,您正在处理一个所谓的lvalue,它与一个地址已知的对象进行简短的交谈,因为该对象是显式定义的。函数的返回值是一个临时对象(它是一个所谓的右值)。其地址未知。我们不知道编译器在其中定义了此对象。因此,我们可能不会应用运算符&到临时对象。

另一个类似的例子

struct A
{
int x;
};
A f() { return A(); }
int main()
{
f().x = 10;  // here the compiler will issue an error
}

不应编译此代码,尽管例如,由于错误或其语言扩展,MS VC++2010将对其进行编译。:)