如果front()
返回引用且容器为空,我得到什么,未定义的引用?这是否意味着我需要在每个empty()
之前检查front()
?
答案 0 :(得分:52)
你得到了未定义的行为 - 你需要在调用front()之前检查容器是否包含使用empty()(它检查容器是否为空)的内容。
答案 1 :(得分:13)
你得到了未定义的行为。
要在(0)处使用范围检查。如果失败,您将获得out_of_range
例外。
答案 2 :(得分:3)
是的,您可以像Graham一样使用'at'而不是使用front。
但是,在(0)只适用于某些容器 - 矢量,双端队列而不是其他容器 - 列表,队列,堆栈。在这些情况下,你必须依靠“空”支票的安全性。
答案 3 :(得分:1)
未定义的行为
答案 4 :(得分:1)
在此实例上调用front()之前,您始终必须确保容器不为空。 将empty()称为安全防范是好的。
当然,根据您的程序设计,总是有一个非空容器可以是一个不变的语句,允许您在每次调用front()时阻止并将调用保存到empty()。 (或者至少在代码的某些部分?)
但如上所述,如果您想避免程序中未完成的行为,请将其设为强不变量。