gpt4 book ai didi

c++ - boost::none_t 实现的基本原理是什么?

转载 作者:IT老高 更新时间:2023-10-28 13:01:23 26 4
gpt4 key购买 nike

Boost.Optional使用虚拟类型来允许构造 boost::optional<T> 的未初始化实例.这种类型称为 none_t , 和一个实例 none为方便起见,已在 header 中定义,允许我们编写如下代码:

boost::optional<int> uninitialized(boost::none);

none_t的定义,我注意到它实际上是一个 typedef,对应于指向某个虚拟结构的成员指针:

namespace boost {

namespace detail { struct none_helper{}; }

typedef int detail::none_helper::*none_t ;

none_t const none = (static_cast<none_t>(0)) ;

} // namespace boost

与这样的简单空结构相比,使用这种复杂的 typedef 有什么优势?

namespace boost {

struct none_t {};

none_t const none;

} // namespace boost

最佳答案

啊,我从没想过要深入挖掘。

常规 struct 的一个(或多或少明显的)优点是,现在 none 在 bool 上下文中计算为 false

与另一个“评估为假”相比的一个优点是可以防止指向成员的指针有害地 boost 为整数类型。

所以,我想它提供了一种安全而简洁的方法来获得一个评估为 false 的对象。

编辑:这里应该知道(嗯...)Safe Bool Idiom 的结构。 .

关于c++ - boost::none_t 实现的基本原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com