为什么boost可选参考不是T*的包装?

vol*_*evo 18 c++ memory boost pointers reference

既然boost::optional<T&>已经是专业化了,为什么它不仅仅被实现为包装T*?这将允许它占用更少的空间,因为不需要m_initialized布尔值.

Jea*_*ier 6

由于boost 1.61可选,因此在参考的情况下进行了优化.

发行说明提到:

sizeof(optional<T&>) == sizeof(T*)
Run Code Online (Sandbox Code Playgroud)

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


Max*_*kin 2

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

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

  • 我认为您可能误解了...我没有看到 `boost::Optionals&lt;T*&gt;` 的相关性。 (5认同)
  • 同意,这并不能回答问题。问题是关于“可选&lt;T&amp;&gt;”,这个答案是关于“可选&lt;T*&gt;”。 (4认同)