【发布时间】:2013-06-22 21:15:38
【问题描述】:
我需要一些关于我正在学习的编程语言课程中的问题的指导。
我们需要想出一种方法来在 C++ 中实现一个数组类,以便静态检查访问它的元素是否溢出。 我们不会使用 C++11(静态断言)或任何其他黑盒解决方案 - 这是一个理论问题,而不是我出于编码目的需要的东西。
我们确实在演讲幻灯片中得到了强烈的暗示:
" 当索引是整数类型时,不可能检测到数组索引的溢出——如果索引的类型对应于数组大小(它必须是数组类型的一部分),则无法检测到溢出。 "
我考虑过使用固定长度(数组大小)字符串作为索引,但除了考虑这个选项之外,我真的没有得到太多:(.
澄清:好的,这得到了一些混乱的答复,可能是因为我不清楚 - 所以我会再次强调:
- “静态”表示“在编译时”。 编译器应该提醒用户溢出(警告/错误..)。不是运行时!
- 阅读给我们的“提示”——它会被使用。具体来说,程序可能不会检查边界!尤其是 c++ 中数组的 at() 方法,不得使用或模拟。
鉴于这一切,我认为他们想要的是某种转变 int->(索引类型) 在数组溢出的情况下以某种方式失败或为这些索引计算错误的值。
希望现在更清楚了。谢谢你的
【问题讨论】:
-
如果我对你的理解正确(我可能不是),如果你想创建一个数组类一种内置的边界检查。如果用户尝试访问超出范围的元素,它应该抛出异常。我不会费心为您提供代码,但我仍然希望它作为指导有所帮助
-
听起来他在要求你重新发明
std::array::at? -
我认为您的问题需要改写。一个类不能静态地检查自己。虽然理论上可以使用静态检查来创建函数,但我怀疑它们是否有用。可能您想问其他问题,例如运行时边界检查?
-
“静态检查”是什么意思?你想编译失败吗?还是只想在编译时确定它并在运行时指出越界?
标签: c++ arrays static-code-analysis