您好我正在编写处理矩阵操作的程序,我正在努力解决成员函数中的错误处理问题。
给定功能
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。我在创建对象时将矩阵元素存储在动态数组中
答案 0 :(得分:2)
有三种实际可能性:
assert
前提条件,并依靠测试来根除所有无效调用,或在过去,还包括一些方案,例如调用用户提供的错误函数,但除了终止或抛出异常之外,它还能做什么呢。
第三种可能性,即返回已知的错误值,可能看起来不适合您目前的困境,理想情况下会退回double&
,这将立即被使用。但总的来说,这是一个有效的选择。例如,它可以实现为Boost optional
。
顺便提一下,一些一般的建议。
对于给定的代码,
double & MATRIX::elements(int i, int j) const;
通常const
方法不提供读/写访问权限,它会破坏目的。但是也有例外,例如代理对象。但是在第三个抓握的手上,上面的代码不适用于此类对象。
另外,请考虑为宏保留所有UPPERCASE标识符。这样你就可以避免一些名字冲突。请记住,宏不遵守范围,并且由于很多人都使用宏的所有大写标识符,而很少有人这样做,因此使用普通标识符的大写字母会导致发生冲突(导致不合需要的文本替换)的可能性更大。