experimental::optional "nullopt_t" 命名理由

experimental::optional "nullopt_t" naming rationale

boost::optional C++ 库有 'no value' 由 boost::none 表示,这是一个精心选择的名称,如代码

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

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

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

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

void 的一个良好行为良好的值语义替代方案很有用,但需要回答很多问题。它应该有 operator< 并且是 Ordered 类型吗?它应该与 nullptr 相互转换吗?比得上nullptr?我不想让这些问题阻碍 boost::optional 的通过,所以我们达成了妥协。现在,使用 nullopt,其唯一目的是初始化 optional 对象。以后加个乖巧的none。事实上,关于 'prefect' none 的工作正在进行中。 See here.