gpt4 book ai didi

C++,从具有引用返回类型的函数返回什么以指示错误

转载 作者:太空狗 更新时间:2023-10-29 23:27:49 25 4
gpt4 key购买 nike

假设我们有一个类

class cFoo {};

还有一个带有 cFoo 对象 vector 的对象,如下所示:

class cContainer
{
public:
const cFoo& getFoo(std::size_t index) const;
private:
std::vector<cFoo> fooList_;
}
const fCoo& cContainer::getfoo(std::size_t index) const
{
if(index < fooList_.size())
return fooList_[index];
else
??????????
};

所以我的问题是“在这种情况下,最佳做法是什么?”。那就是在 else 部分之后放置什么来代替 ?????s。这个问题对于任何返回引用的成员函数(无论是否为 const)都是有效的。当我们没有任何东西可以返回时,应该返回什么?

显然返回一个本地临时变量是不可能的。我想到的另一个解决方案是返回 cFoo() 的静态实例,最有可能在 cFoo 类定义/实现期间定义和初始化。

当然,在这种情况下我们可以避免返回引用,但这可能是性能不佳的选择(特别是如果我们缺少像移动运算符这样的好东西)。

最佳答案

在这种情况下,STL 所做的是抛出异常。

例如,您可以查看 std::vector::at成员函数:

http://en.cppreference.com/w/cpp/container/vector/at

抛出 std::out_of_range如果您要求超出范围的东西,则异常(exception)


另一种选择是返回一个指针或其在上下文中语义更明确的等价物,一个optional referenceboost::optional<fCoo&> .

如果“超出范围”的情况不是那么特殊并且应该不时发生,我建议采用这种方式。

最后,如果您认为这种情况永远不会发生,除非它是开发人员错误,您应该使用 assertion .

关于C++,从具有引用返回类型的函数返回什么以指示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29163253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com