experimental :: optional“nullopt_t”命名原理

时间:2016-11-02 19:30:24

标签: c++ boost optional

boost::optional C ++库的“无值”由boost::none表示,这是一个精心挑选的名称,如

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

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

非常易读 - 意图清楚地传达给读者。它也类似于其他语言的标准类中提供的“无值”。此Boost库已被std::experimental::optional吸收到标准中,但none已重命名为不可思议的nullopt_t。有谁知道为什么?

1 个答案:

答案 0 :(得分:4)

有趣的是,事实证明boost::optional标准化比标准化boost::none更容易。 boost::none虽然它的目的是初始化boost::optional,但它没有明确定义的语义。

void的良好表现的价值语义替代方案很有用,但需要回答很多问题。它应该是operator<并且是有序类型吗?它应该与nullptr进行inter-convertibe吗?与nullptr相比?我不希望这些问题阻碍boost::optional的采用,因此我们同意妥协。现在,请使用nullopt,其唯一目的是初始化optional个对象。稍后添加表现良好的none。事实上,关于'完美'none的工作正在进行中。 See here