gpt4 book ai didi

c++ - 为什么在 Boost 中有两个变体类实现?

转载 作者:行者123 更新时间:2023-12-05 02:44:17 32 4
gpt4 key购买 nike

Boost 似乎有两个变体类模板的实现:

很少见(尽管并非闻所未闻)Boost two include 两个采用相同概念的。为什么变体会发生这种情况?这些变体有何不同?

最佳答案

第一种变体类模板,boost::variant,早于 C++17 的 std::variant。参见 this question用于与 std::variant 的比较。主要区别在于当在变体中构造值时抛出异常时该怎么做。

std::variant 选择是允许无值状态; boost::variant 选择是在堆上而非就地构建新对象,并存储指向该位置的指针。

boost::variant2是后来的补充,一方面是希望坚持C++17 API,另一方面也是表达对其选择的不满关于这件事。

boost::variant2 选择了第三个选项,不同于之前的两个实现:双缓冲。它占用了问题类型大小的两倍;在未使用的一半中构造一个新值,一旦构造成功 - 销毁另一半中的旧值。如果所有类型都不可抛出构造,则没有必要,boost::variant2 实际上不会有双缓冲区。

这个选择意味着 boost::variant2 永远不会没有值(value);事实上,它的文档标题强调了这一事实。

关于c++ - 为什么在 Boost 中有两个变体类实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66522650/

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