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
。有谁知道为什么?
答案 0 :(得分:4)
有趣的是,事实证明boost::optional
标准化比标准化boost::none
更容易。 boost::none
虽然它的目的是初始化boost::optional
,但它没有明确定义的语义。
void
的良好表现的价值语义替代方案很有用,但需要回答很多问题。它应该是operator<
并且是有序类型吗?它应该与nullptr
进行inter-convertibe吗?与nullptr
相比?我不希望这些问题阻碍boost::optional
的采用,因此我们同意妥协。现在,请使用nullopt
,其唯一目的是初始化optional
个对象。稍后添加表现良好的none
。事实上,关于'完美'none
的工作正在进行中。 See here