加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

是否定义为C标准算法提供空范围?

发布时间:2020-12-16 10:43:18 所属栏目:百科 来源:网络整理
导读:继 my previous question之后,我们能否证明该标准允许我们将空范围传递给标准算法? 第24.1 / 7段将“空范围”定义为范围[i,i)(其中i有效),并且我看起来似乎是“可达”的,但我不确定这是否有资格证明. 特别是,在查看排序功能时会遇到麻烦.例如,std :: sort:
继 my previous question之后,我们能否证明该标准允许我们将空范围传递给标准算法?

第24.1 / 7段将“空范围”定义为范围[i,i)(其中i有效),并且我看起来似乎是“可达”的,但我不确定这是否有资格证明.

特别是,在查看排序功能时会遇到麻烦.例如,std :: sort:

Complexity: O(N log(N)) (where N == lastfirst) comparisons

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

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

解决方法

我似乎没有太大的问题空间.在§24.1/ 6中,我们被告知:

An iterator j is called reachable from an iterator i if and only if there is a finite sequence of applications of the expression ++i that makes i == j.

以$24.1 / 7:

Range [i,j) is valid if and only if j is reachable from i.

由于0是有限的,[i,i)是有效范围. §24.1/ 7继续说:

The result of the application of functions in the library to invalid ranges is
undefined.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读