让null std ::可选的数学意义低于任何保持价值?还是仅是为了一致性而制造的,如果它是"更多"而不是"少"?
直接来自提案(强调我的(:
已经提出了许多方法将脱离状态包括在比较中。已提出的,已经制作了,以使等效性和严格的弱排序的公理被保留:脱离接合的
optional<T>
被简单地视为T
的附加和独特的值仅与自身相等;该值总是比T
的任何值小。
进一步说
值
nullopt
可能被认为大于T
的任何值。选择在很大程度上是任意的。我们选择坚持boost::optional
的作用。
看一下boost::optional
的看法,我们从其文档中获得:
以类似的方式,每当
T
为LessThanComparable
时,optional<T>
类型为LessThanComparable
。将包含无值比较的可选对象小于T
的任何值。为了说明这一点,如果size_t
的默认排序为{0, 1, 2, ...}
,则optional<size_t>
的默认排序为{boost::none, 0, 1, 2, ...}
。该顺序没有实用的解释。目的是进行任何语义上正确的默认排序,以使optional<T>
在有序的关联容器中可用(无论T
可用(。
所以不,除了"没有什么比某物"之外,这一切都没有"数学意义"。这是一个任意选择的无实际后果的选择,只是确保可以在没有太多麻烦的有序容器中使用类型。