继 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/