【发布时间】:2015-05-04 14:33:54
【问题描述】:
我有两个预期结果相同的代码段:
第一个:
SomeClass somefunc(...){
SomeClass newObj;
//some codes modify this object
return newObj;
}
int main(){
SomeClass *p;
p = &(somefuc(...));
}
第二个:
SomeClass *somefunc(...){
SomeClass newObj;
//some codes modify this object
return &newObj;
}
int main(){
SomeClass *p;
p = somefunc(...);
}
为什么在我尝试构建第一个代码段时出现“获取临时对象的地址”错误,而第二个代码段没有产生错误?
【问题讨论】:
-
请显示您的实际代码。
-
两个片段都无法编译。第二个是因为您尝试从声明返回
SomeClass的函数中返回SomeClass*。另请注意,newObj不是临时的 - 它是一个命名变量。获取地址没有问题 - 问题在于在变量的生命周期结束后使用所述地址。 -
第二个例子甚至不应该编译,
p = &(somefuc(...));也不应该编译,因为你不能获取右值的地址 -
@BaummitAugen 这个问题肯定存在(在第二个例子中),但与手头的问题无关(在第一个例子中)。不是重复的。
-
我猜你在第二个例子中是指
SomeClass *somefunc(...){?
标签: c++