我需要为可选值实施快速解决方案。我不想拖入任何第三方库。
可选类一般是如何实现的?当一个可选对象处于“空状态”时,它是否仍然默认构造底层对象?
原文由 NFRCR 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要为可选值实施快速解决方案。我不想拖入任何第三方库。
可选类一般是如何实现的?当一个可选对象处于“空状态”时,它是否仍然默认构造底层对象?
原文由 NFRCR 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.3k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答513 阅读✓ 已解决
通常,一个布尔标志来指示它是否为空,以及一个适当大小和对齐的字节数组来存储该值。
不;这将对存储类型施加不必要的要求,并导致潜在的不良副作用。当
optional
变为非空时,将使用placement-new 创建存储的对象,并在变为空时使用析构函数调用销毁。对于快速而简单的实现,如果您不需要 Boost 或建议的标准版本的所有灵活性,您可以简单地存储一个默认构造的对象。
我会重新考虑为什么你不觉得你想要那个。 Boost 实现仅是标头,经过良好测试,并且应该在标准版本到来时直接替换为标准版本。我当然更相信它,而不是我自己拼凑的东西。