类函数返回无效左值

时间:2015-10-21 15:33:57

标签: c++ return-value

您好我正在编写处理矩阵操作的程序,我正在努力解决成员函数中的错误处理问题。

给定功能

double & MATRIX::elements(int i, int j) const;

它是可以返回引用的函数,因此函数可以是a 左值,例如

object.elements(1,2)= 2; // I can change the value matrix element (1,2) to be 2

我假设有些人可能错误地输入矩阵的索引(即i和j的值无效)元素(i,j)不存在。因此,我写了一个if-else语句,但是,我想知道当找到i和j的无效值时应该返回什么?我可以阻止函数返回任何类似

之类的情况
object.elements(100,100000)= 2; // where the matrix size is only 3x3

不会发生?

P.S。我在创建对象时将矩阵元素存储在动态数组中

1 个答案:

答案 0 :(得分:2)

有三种实际可能性:

  • assert前提条件,并依靠测试来根除所有无效调用,或
  • 在前置条件不为真时抛出异常,或
  • 返回一个容易识别的错误值。

在过去,还包括一些方案,例如调用用户提供的错误函数,但除了终止或抛出异常之外,它还能做什么呢。

第三种可能性,即返回已知的错误值,可能看起来不适合您目前的困境,理想情况下会退回double&,这将立即被使用。但总的来说,这是一个有效的选择。例如,它可以实现为Boost optional

顺便提一下,一些一般的建议。

对于给定的代码,

double & MATRIX::elements(int i, int j) const;

通常const方法不提供读/写访问权限,它会破坏目的。但是也有例外,例如代理对象。但是在第三个抓握的手上,上面的代码不适用于此类对象。

另外,请考虑为宏保留所有UPPERCASE标识符。这样你就可以避免一些名字冲突。请记住,宏不遵守范围,并且由于很多人都使用宏的所有大写标识符,而很少有人这样做,因此使用普通标识符的大写字母会导致发生冲突(导致不合需要的文本替换)的可能性更大。