实验性::可选"nullopt_t"命名理由
experimental::optional "nullopt_t" naming rationale
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
的工作正在进行中。看到这里。
相关文章:
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 在调用其析构函数之前,是否有任何实际理由检查某些东西是否可破坏?
- 有什么理由不扩展 std::set 以添加下标运算符吗?
- 是否有理由在标题中保留完全专用的模板?
- 任何不使用全局Lambda的理由
- 如果我有很多具有相似前缀的字符串,是否有理由从该前缀创建一个子字符串?
- 如何从 std::optional 中获取 QByteArray<QByteArray>,并在没有其他 malloc 的情况下保留 std::nullopt?
- 如果代码中没有连接任何插槽,是否有理由发出Qt信号?
- 有什么理由用右值引用重载运算符吗?
- 有什么理由在函数中使用 const 吗?
- std::optional - 使用 {} 或 std::nullopt 构造空
- 如何使lambda与std::nullopt一起工作
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 有什么理由在没有继承的情况下声明一个虚拟方法
- 是否有理由对非负常量使用无符号类型?
- 是否有理由大多数/所有 try-catch 示例只对 throw 语句使用 void 子函数
- 不允许功能模板的部分专业化背后的理由是什么?
- 铸造兄弟姐妹类是有充分理由的
- 这个错误是什么?似乎没有理由出现
- typeid 运算符忽略 cv 限定符背后的理由是什么?