C++的容器vector
、deque
、...除了operator[index,还提供
来访问容器元素。at(index)
访问器功能]
我的代码中从来没有,也从来没有需要过这个函数,因为在我的 C++ 代码中访问可能超出范围的元素是没有意义的。始终编写代码以访问正确的索引(或在索引无法匹配的情况下产生有意义的错误/异常。)
我会对在生产代码中使用 at()
的真实示例(可能来自一些开源项目,因为这会添加一些上下文)感兴趣。
也许有人可以举一个使用 at()
有意义的算法问题的例子。
注意:我已经最近在一些单元测试代码中使用了它,在这些代码中添加索引检查代码被认为不值得麻烦,并且 at( )
被认为是足够的信息+上下文,以防测试中断。
注意:关于 this answer by ildjarn - 我确实不想就此展开讨论或评论战。我对“积极”的发现很感兴趣,即 具体的例子已被使用。谢谢。
最佳答案
好吧,当您不控制正在使用的索引时(例如,如果它是由您的代码的客户端传入的),您应该手动检查它是否在范围内,或者使用 at
获取报告的异常(您可以捕获并使用自己的错误报告通知调用者,或者简单地向上传播标准异常)。
换句话说,被调用函数有责任检查输入参数,但它是使用 if
语句显式执行此操作,还是使用 at
而不是 []
是一个有争议的问题。如果我要做的只是抛出一个 out_of_range
异常(如果传入的索引大于或等于集合的大小),我想我会让 在
这样做并为自己节省一些编码。
静默传回不良数据几乎从来都不是最佳解决方案。简单地将 x[7] 传回四元素整数甲板的问题在于调用者认为它是一个有效的零。 不是这种情况。
关于c++ - C++ 标准库中 `at()` 索引函数的真实用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5645730/