【发布时间】:2013-03-14 05:29:28
【问题描述】:
我正在阅读一本关于 Safe C++ 的书。在这里,作者提到了如何避免超出范围的数组读取。在这里,提到了我们如何避免多维数组的越界数组读取。这里作者使用operator()函数如下链接所示代替operator[]并给出以下解释。
https://github.com/vladimir-kushnir/SafeCPlusPlus/blob/master/scpp_matrix.hpp
这里请注意,要访问多维数组,我们要么需要使用多个[] 运算符,例如matrix[i][j],要么需要使用单个() 运算符,例如matrix(i,j)。
如果我们让[] 运算符返回指向第 i 行第零个元素的T* 指针,则可以实现第一种方法。但是,这否定了我们对列索引越界的诊断,这违背了在运行时捕获错误的目的。当然,我们可以创建一些包含对行的智能引用的模板类,返回使用第一个运算符([i])的实例,然后在第二个运算符([j])中使用边界检查。
我的问题是作者所说的“创建一些包含对行的智能引用的模板类,返回使用第一个运算符([i])的实例,然后在第二个操作员 ([j])。" ?要求提供示例代码我们如何在 C++ 中实现上述逻辑?
感谢您的时间和帮助。
【问题讨论】:
-
您能否用您目前在这方面的努力启发我们
-
当问题是“这是什么意思”时,到目前为止如何努力?
-
作者的意思是您返回一个对象,该对象包含对索引行开头的嵌入式引用,并且在该对象内,大小限制因此它(对象)被覆盖
operator []可以边界检查索引该维度类似于第一个维度的索引方式。 -
就用第二种方法。
[][]被高估了。
标签: c++