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

时间:2014-02-17 19:24:06

标签: c++ declaration return-type

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

class  className{
...
}

className func(){
    className cl;
    ...
    return cl;     
}

int main(){
    ...
    func();
}

当你在程序体内调用函数func()时,它会返回什么?对象cl的临时副本? 我不理解这一点,因为在函数func()的正文中,您可以获得地址&cl,但如果您尝试在函数{{}内调用&(func()),则会出错。 1}}。

1 个答案:

答案 0 :(得分:1)

在函数内部,您正在处理一个所谓的左值,很快就会与一个对象通知,因为该对象是明确定义的。 函数的返回值是一个临时对象(它是一个所谓的右值)。它的地址不得而知。我们不知道 编译器定义此对象的位置。所以我们可能不适用运营商和到一个临时对象。

另一个类似的例子

struct A
{
   int x;
};

A f() { return A(); }

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

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