18

既然boost::optional<T&>已经是一个专业化,为什么不把它作为一个包装器来实现T*呢?这将允许它占用更少的空间,因为不需要m_initialized布尔值。

4

3 回答 3

6

由于boost 1.61 optional 在引用的情况下进行了优化。

发行说明提到:

sizeof(optional<T&>) == sizeof(T*)

因此,在这种情况下,它肯定是作为指针实现的。

于 2016-05-17T13:13:55.280 回答
2

可能是这样,因为未初始化的boost::optional<T*>对象必须不同于已boost::optional<T*>初始化的对象NULL,例如,此函数不能返回任何值、aNULL或非NULL指针

在这种情况下,你为什么不使用一个NULL没有值的普通指针。无需在此之上添加更多复杂性boost::optional<>。我的意思是,让事情变得更大或更复杂很容易,但很难让它们变得更好。

于 2012-09-17T08:48:35.187 回答
1

首先,boost::optional<T&>不是专业。如果您查看代码,您会发现它确实执行了一些基于标记的调度来自定义引用类型的行为,但boost::optional_base<T>类模板本身并不是专门的。

然而,为什么不实施这种空间优化仍然是一个合理的问题。可能是因为它不是专业的,所以这项工作要困难得多,我不知道。

关于为什么您更喜欢optional<T&>原始指针的问题是一个完全独立的问题,因此请随时单独询问...

于 2013-02-13T19:10:12.237 回答