想象一下,你有这样的情况:
class className{
...
}
className func(){
className cl;
...
return cl;
}
int main(){
...
func();
}
当你在程序体内调用函数func()
时,它会返回什么?对象cl
的临时副本?
我不理解这一点,因为在函数func()
的正文中,您可以获得地址&cl
,但如果您尝试在函数{{}内调用&(func())
,则会出错。 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将由于错误或其语言扩展而编译它。:)