Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么没有std::uses_分配器<;标准::可选>;?_C++_Allocator - Fatal编程技术网

C++ 为什么没有std::uses_分配器<;标准::可选>;?

C++ 为什么没有std::uses_分配器<;标准::可选>;?,c++,allocator,C++,Allocator,对于std::variant,有一个专门的uses\u分配器,但对于std::optional,则没有。为什么?来自: 不允许实现使用附加存储(如动态内存)来分配其包含的值 因此,不需要分配器 尽管对于变体也是如此: 不允许实现使用额外的存储(如动态内存)来分配包含的值 显然,为std::variant(HT:@K-ballo!)使用了_分配器专门化 因为 如果可选项包含值,则该值保证为 作为可选对象示意图的一部分分配,即无动态 内存分配从未发生过。因此,可选对象为 对象,而不是指针,即使运算符

对于std::variant,有一个专门的uses\u分配器,但对于std::optional,则没有。为什么?

来自:

不允许实现使用附加存储(如动态内存)来分配其包含的值

因此,不需要分配器

尽管对于变体也是如此:

不允许实现使用额外的存储(如动态内存)来分配包含的值

显然,
std::variant
(HT:@K-ballo!)使用了_分配器专门化

因为

如果可选项包含值,则该值保证为 作为可选对象示意图的一部分分配,即无动态 内存分配从未发生过。因此,可选对象为 对象,而不是指针,即使运算符*()和运算符->() 定义了


另一方面,
std::variant
在标准的早期版本中用于支持分配器,因此我觉得这种专门化是当时的遗留问题。

variant也不分配内存。@draganm17我有一种不受支持的感觉,认为这是由于variants的原始实现造成的,而variants确实是这样。