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.
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.