my previous question 之后, 我们能否证明标准允许我们将空范围传递给标准算法?

第 24.1/7 段将“空范围”定义为范围 [i,i)(其中 i 有效),并且 i 似乎可以从自身“到达”,但我不确定这是否有资格作为证明。

特别是,我们在查看排序函数时遇到了麻烦。例如, std::sort :



由于log(0)一般被认为是未定义的,我不知道0*undefined是什么,这里会不会有问题?

(是的,好吧,我有点迂腐。当然,没有自尊的 stdlib 实现会导致传递给 std::sort 的空范围的实际问题。但我想知道这里的标准措辞是否存在潜在漏洞。 )

最佳答案

我似乎没有太多质疑的余地。在 §24.1/6 中,我们被告知:



24.1/7 美元:



由于 0 是有限的,因此 [i, i) 是一个有效范围。 §24.1/7 继续说:



这并不是说有效范围保证了定义的结果(合理,因为还有其他要求,例如比较函数),但肯定似乎暗示范围为空,本身不应该导致 UB 或类似的东西。然而,特别是,该标准将空范围作为另一个有效范围;空和非空有效范围之间没有真正的区别,因此适用于非空有效范围的内容同样适用于空有效范围。

关于c++ - 它是否定义为为 C++ 标准算法提供空范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7505267/

10-12 12:36
查看更多