我从空std容器的front()得到什么?
如果front()
返回一个引用,并且容器是空的,我会得到一个未定义的引用? 这是否意味着我需要在每个front()
之前检查empty()
front()
?
你得到未定义的行为 – 你需要在调用front()之前检查容器是否包含使用empty()的东西(它检查容器是否为空)。
你得到未定义的行为。
在(0)处使用范围检查。 如果这失败,你会得到一个out_of_range
exception。
是的,你可以像格雷厄姆一样使用'at'而不是使用front。
但是,(0)只能用于一些容器 – vector,而不是其他的 – 列表,队列,堆栈。 在这些情况下,你必须重新考虑“空”检查的安全性。
未定义的行为
在调用这个实例的front()之前,你一定要确定你的容器不是空的。 调用empty()作为安全警卫是很好的。
当然,根据你的程序devise,总是有一个非空的容器可以是一个不变的语句,允许你在每次调用front()时防止和保存调用为empty()。 (或至less在你的代码的一部分?)
但是如上所述,如果您想要避免程序中的未定义行为,请使其成为一个强大的不variables。