实验性::可选"nullopt_t"命名理由

experimental::optional "nullopt_t" naming rationale

本文关键字:理由 nullopt 可选 实验性      更新时间:2023-10-16

boost::optional c++库有一个由boost::none表示的'no value',这是一个很好的名称,如

f(..., optional<T> default_argument = boost::none)

f(..., optional<T> default_argument = none)

可读性很强——它的意图被清楚地传达给了读者。它也类似于其他语言中标准类中提供的'no value'。这个Boost库作为std::experimental::optional被吸纳到标准中,但none被重命名为难以理解的nullopt_t。有人知道为什么吗?

有趣的是,标准化boost::optional比标准化boost::none更容易。boost::none,虽然它的目的是初始化boost::optional s,但它没有定义良好的语义。

一个行为良好的值语义替代void是有用的,但需要回答很多问题。它应该有operator<和一个有序的类型?它应该与nullptr相互转换吗?与nullptr相比?我不希望这些问题阻碍boost::optional的通过,所以我们达成了妥协。现在,使用nullopt,它的唯一目的是初始化optional对象。稍后添加一个行为良好的none。事实上,"级长"none的工作正在进行中。看到这里。