Class 函数返回无效左值
Class function returning invalid lvalue
你好,我现在正在编写一个处理矩阵操作的程序,我正在努力解决成员函数中的错误处理问题。
给定一个函数
double & MATRIX::elements(int i, int j) const;
它是可以return引用返回的函数,所以函数可以是
左值,例如
object.elements(1,2)= 2; // I can change the value matrix element (1,2) to be 2
我假设有些人可能会错误地输入矩阵的索引(i.e.invalid i 和 j 的值),认为元素 (i,j) 不存在。因此,我写了一个 if-else 语句,但是,我想知道当发现 i 和 j 的无效值时我应该 return 怎么办?我可以阻止函数 returning 这样的情况吗
object.elements(100,100000)= 2; // where the matrix size is only 3x3
不会发生??
P.S。我在创建对象时将矩阵元素存储在动态数组中
存在三种实际可能性:
assert
前提条件,并依靠测试来根除所有无效调用,或者
- 当前提条件不成立时抛出异常,或者
- return 一个容易识别的错误值。
在过去,它还包括诸如调用用户提供的错误函数之类的方案,但实际上它除了终止或抛出异常之外还能做什么。
第三种可能性,return已知的错误值,可能看起来不适合您目前的困境,理想情况下 return 一个 double&
会立即用过的。但总的来说,这是一个有效的选择。例如,它可以实现为 Boost optional
.
顺便提一些一般性建议。
对于给定的代码,
double & MATRIX::elements(int i, int j) const;
通常 const
方法不提供 read/write 访问,它达不到目的。但是也有例外,例如代理对象。但是在第三只手上,上面的代码不适用于此类对象。
此外,考虑为宏保留所有大写标识符。这样你就可以避免一些名称冲突。请记住,宏不遵守范围,并且由于很多人对宏使用全部大写标识符,而很少有人不这样做,因此使用大写字母作为普通标识符时发生冲突并导致不希望的文本替换的可能性更大。
你好,我现在正在编写一个处理矩阵操作的程序,我正在努力解决成员函数中的错误处理问题。
给定一个函数
double & MATRIX::elements(int i, int j) const;
它是可以return引用返回的函数,所以函数可以是 左值,例如
object.elements(1,2)= 2; // I can change the value matrix element (1,2) to be 2
我假设有些人可能会错误地输入矩阵的索引(i.e.invalid i 和 j 的值),认为元素 (i,j) 不存在。因此,我写了一个 if-else 语句,但是,我想知道当发现 i 和 j 的无效值时我应该 return 怎么办?我可以阻止函数 returning 这样的情况吗
object.elements(100,100000)= 2; // where the matrix size is only 3x3
不会发生??
P.S。我在创建对象时将矩阵元素存储在动态数组中
存在三种实际可能性:
assert
前提条件,并依靠测试来根除所有无效调用,或者- 当前提条件不成立时抛出异常,或者
- return 一个容易识别的错误值。
在过去,它还包括诸如调用用户提供的错误函数之类的方案,但实际上它除了终止或抛出异常之外还能做什么。
第三种可能性,return已知的错误值,可能看起来不适合您目前的困境,理想情况下 return 一个 double&
会立即用过的。但总的来说,这是一个有效的选择。例如,它可以实现为 Boost optional
.
顺便提一些一般性建议。
对于给定的代码,
double & MATRIX::elements(int i, int j) const;
通常 const
方法不提供 read/write 访问,它达不到目的。但是也有例外,例如代理对象。但是在第三只手上,上面的代码不适用于此类对象。
此外,考虑为宏保留所有大写标识符。这样你就可以避免一些名称冲突。请记住,宏不遵守范围,并且由于很多人对宏使用全部大写标识符,而很少有人不这样做,因此使用大写字母作为普通标识符时发生冲突并导致不希望的文本替换的可能性更大。