我从空std容器的front()得到什么?

jac*_*hab 47 c++ stl

如果front()返回一个引用并且容器是空的,我得到一个未定义的引用?这是否意味着我需要empty()在每个之前检查front()

小智 54

您得到未定义的行为 - 您需要在调用front()之前检查容器是否包含使用empty()(检查容器是否为空)的内容.

  • 做出 UB 的决定通常意味着在替代方案中有一些开销 - 在这种情况下抛出异常,C++ 总是努力避免这种情况。 (2认同)

gra*_*eds 13

你得到了未定义的行为.

要在(0)处使用范围检查.如果失败则会出现out_of_range异常.


Aru*_*n R 5

是的,您可以像 Graham 提到的那样使用“at”,而不是使用 front。

但是, at(0) 仅适用于某些容器 - 向量、双端队列,而不适用于其他容器 - 列表、队列、堆栈。在这些情况下,您必须依靠“空”支票的安全性。