为什么没有标准::uses_allocator<标准::可选>?

Why there is no std::uses_allocator<std::optional>?

本文关键字:标准 lt 可选 gt uses 为什么 allocator      更新时间:2023-10-16

对于 std::variant,有一个专门的 uses_allocator,但对 std::optional 没有。为什么?

来自标准 23.6.3.1:

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

所以不需要分配器。

尽管变体 23.7.3.1 也是如此:

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

显然,std::variantuses_allocator专业化在 17 C++ 被删除(HT:@K-ballo!

因为

如果可选包含值,则保证该值为 作为可选对象足迹的一部分进行分配,即无动态 内存分配永远发生。因此,可选对象对 对象,而不是指针,即使运算符*((和运算符>(( 被定义。

http://en.cppreference.com/w/cpp/utility/optional

另一方面,std::variant曾经在早期版本的标准中支持分配器,所以我感觉这种专业化是那些时代的残余。