返回引用时返回错误

时间:2014-01-22 14:34:32

标签: c++ error-handling reference

函数返回int

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

我的第一个想法是返回NULL。 但显然引用不能为NULL。

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

4 个答案:

答案 0 :(得分:6)

各种选项,大致按照我首选的选项排序:

  • 抛出异常,通常为std::out_of_range
  • 返回指针
  • 使用明确定义的无效值返回其他类型,例如std::pair<bool,int&>boost::optional<int&>。如果你想按值而不是引用返回一些内容,这会更有用,所以不能返回一个指针。
  • 如果您可以选择永远不会是有效数据的数字,则返回对静态幻数的引用。这是令人讨厌的,因为没有什么可以阻止调用者修改它。

答案 1 :(得分:2)

正确的方法是抛出std::out_of_range类型的异常,以防参数位置没有可接受的值。

答案 2 :(得分:0)

如果需要返回引用,则必须在发生错误时抛出异常。

答案 3 :(得分:0)

要考虑的另一件事是,即使你返回一个'int'(即不是引用),NULL也将为0(并且很容易与有效的int值'0'混淆。)< / p>

如果你想坚持这个函数定义,那么抛出异常来发出错误信号。

int&     MyClass::getElement(int position)
{
   if (position < _size)
      return (_array[position]);

   throw std::out_of_range("Invalid size to getElement");
}