【发布时间】:2011-02-26 15:48:46
【问题描述】:
如果 STL 容器已排序,有没有办法编写一个返回 true 的单行条件?有问题的容器是 std::vector
我打算在断言中使用它
【问题讨论】:
-
你不应该把这种东西放在断言中。断言适用于永远不可能发生的事情。抛出异常很可能更合适。如果传递一个未排序的向量违反了方法或对象操作合同,那么它应该抛出不断言。异常比断言有很大的优势,在大多数情况下应该优先使用。
-
@radman:如果它们永远不可能发生,你为什么要断言它们?您需要定义上下文!例如:断言类不变量,但在违反接口前置条件或后置条件时抛出。
-
@ltjax 你的权利有点简洁。断言主要是为了捕捉程序员的错误,异常是针对错误的输入或不可避免的运行时问题。我认为类不变量是正确使用断言的一个很好的例子。从根本上说,断言为跟随它们的代码提供了保证,从而最大限度地减少侵入性错误处理,并尽早和大声地发现程序员错误。
-
这对我来说似乎是一个很好的断言。如果您想编写类似 binary_search 的东西,那么这需要一个排序容器才能工作。在那里有一个断言来检查它是否真的是排序的,这似乎是断言的用途。虽然当然这是一个非常昂贵的测试......