返回参考时返回错误

Return error when returning a reference

本文关键字:返回 错误 参考      更新时间:2023-10-16

一个函数返回int

上的参考
int&     MyClass::getElement(int position)
{
   if (position < _size)
      return (_array[position]);
   return ([...]) // An Error
}

我的第一个想法是返回null。但是显然参考不能为null。

在这种情况下,返回错误的正确方法是什么?

各种选项,首先用我的首选选项订购:

  • 引发一个例外,常规std::out_of_range
  • 返回指针
  • 返回一些其他类型,具有定义良好的无效值,例如std::pair<bool,int&>boost::optional<int&>。如果您想通过值返回某些内容,而不是参考,这将更有用,因此无法返回指针。
  • 如果您可以选择一个永远不会有效数据的数字,请返回对静态魔术号码的引用。这很讨厌,因为没有什么可以阻止呼叫者修改它。

正确的方法是在参数位置没有可接受的值的情况下抛出类型std::out_of_range的例外。

如果您需要返回参考,则必须在错误的情况下提出异常。

要考虑的另一件事是,即使您要返回'int'(即不是参考),null也将为0(并且很容易与有效的int值混淆那是'0')。

如果要坚持此功能定义,请引发异常以发出错误。

int&     MyClass::getElement(int position)
{
   if (position < _size)
      return (_array[position]);
   throw std::out_of_range("Invalid size to getElement");
}