这个问题已经在这里有了答案:




9年前关闭。






我在下面的第二行上收到错误“将引用返回临时”。

class Object : public std::map <ExString, AnotherObject> const {
public:
const AnotherObject& Find (const ExString& string ) const {
  Object::const_iterator it = find (string);
  if (it == this->end()) { return AnotherObject() };
  return ( it->second );
}
}

我的课实现了std::map。

我是C++的新手,所以我猜测它只是语法错误。有什么帮助吗?

最佳答案

如果您的函数如下所示:

AnotherObject& getAnotherObject()
{

    . . .

    Object::const_iterator it = find ("lang");
    if (it == this->end()) { return AnotherObject() };

    . . .

}

问题在于,您返回的AnotherObject()将在函数退出后立即销毁,因此函数的调用者将具有对虚假对象的引用。

但是,如果您的函数按值返回:
AnotherObject getAnotherObject()

然后在原件销毁之前先进行复印,这样就可以了。

08-26 04:18