【问题标题】:Why std::optional<bool> uses two bytes?为什么 std::optional<bool> 使用两个字节?
【发布时间】:2020-04-15 21:02:21
【问题描述】:

如果 C++ 允许 bool 使用任何位,是什么阻止 C++ 优化 std::optional 以使用 1 个字节并使用两个位来表示 has_valuevalue()?当然,我们会使用掩码,但在现代处理器中它不会损害性能。

【问题讨论】:

  • "如果 C++ 允许 'bool' 使用任何位" 从什么时候开始? sizeof(bool) == 1。您是否建议将std::optional&lt;bool&gt; 专门化为“特别”?我们已经有了这样一种思路造成的腹胀,不需要再多了。
  • 我建议您创建一个 dv::optional_bool,它可以完成 std::optional&lt;bool&gt; 所做的所有事情,但内存占用更好。
  • 不,拜托,不是另一个std::vector&lt;bool&gt;
  • @idclev463035818,没关系,我的大脑死了,忘记了optional返回参考。

标签: c++ memory stl


【解决方案1】:

This:

constexpr const T& operator*() const&;
constexpr T& operator*() &;
constexpr T&& operator*() &&;

让你想要的成为不可能。 operator* 需要返回对持有对象的引用。

【讨论】:

    猜你喜欢
    • 2021-05-16
    • 2018-03-14
    • 1970-01-01
    • 2013-03-26
    • 2018-09-20
    • 2018-02-23
    • 2017-03-15
    • 2019-09-17
    • 1970-01-01
    相关资源
    最近更新 更多