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

时间:2009-03-25 14:03:00

标签: c++ stl

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

5 个答案:

答案 0 :(得分:52)

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

答案 1 :(得分:13)

你得到了未定义的行为。

要在(0)处使用范围检查。如果失败,您将获得out_of_range例外。

答案 2 :(得分:3)

是的,您可以像Graham一样使用'at'而不是使用front。

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

答案 3 :(得分:1)

未定义的行为

答案 4 :(得分:1)

在此实例上调用front()之前,您始终必须确保容器不为空。 将empty()称为安全防范是好的。

当然,根据您的程序设计,总是有一个非空容器可以是一个不变的语句,允许您在每次调用front()时阻止并将调用保存到empty()。 (或者至少在代码的某些部分?)

但如上所述,如果您想避免程序中未完成的行为,请将其设为强不变量。