gpt4 book ai didi

c++ - 返回无效左值的类函数

转载 作者:行者123 更新时间:2023-11-30 03:48:22 26 4
gpt4 key购买 nike

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

给定一个函数

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

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

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

不会发生??

附言我在创建对象时将矩阵元素存储在动态数组中

最佳答案

存在三种实际可能性:

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

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

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


顺便说一下,一些一般性建议。

对于给定的代码,

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

通常 const 方法不提供读/写访问,这违背了目的。但是也有异常(exception),例如代理对象。但在第三只手上,上面的代码不适用于此类对象。

此外,请考虑为宏保留所有大写标识符。这样你就可以避免一些名称冲突。请记住,宏不遵守范围,并且由于很多人对宏使用全部大写标识符,而很少有人不这样做,因此使用大写字母作为普通标识符时发生冲突并导致不希望的文本替换的可能性更大。

关于c++ - 返回无效左值的类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com