std :: variant有一个uses_allocator的专门化,但不适用于std :: optional。为什么?为什么没有std :: uses_allocator <std :: optional>?
2
A
回答
0
实现不允许使用额外的存储器,比如动态存储器,分配其包含的值。
所以没有必要为一个分配器。
虽然同样是变体23.7.3.1真:
实现不允许使用额外的存储器,比如动态存储器,以分配所包含的值。
显然,uses_allocator
专业化为std::variant
was removed for C++17(HT:!@ K-BALLO)。
0
由于
如果任选包含一个值,该值被保证是 分配为可选的对象足迹部分,即没有动态 存储器分配曾经发生。因此,即使已定义运算符*()和运算符 - >() ,可选对象也会模拟一个对象,而不是指针。
http://en.cppreference.com/w/cpp/utility/optional
在另一方面,用于支持分配器在标准的早期版本std::variant
,所以我感觉这种专业化是当年的遗迹。
相关问题
- 1. 为什么没有std :: inplace_merge_unique?
- 2. 为什么没有std :: from_string()?
- 3. 为什么没有std :: on_exit?
- 4. 为什么`std :: common_type_t <std :: ostream&,std :: ostream&>`等于`std :: ostream`而不是`std :: ostream&`?
- 5. 为什么std :: hash没有在C++ 0x中为std :: weak_ptr定义?
- 6. 什么是std :: cout << std :: cin做什么?
- 7. std :: shared_ptr有什么问题<std :: vector <double>>
- 8. 为什么没有提供std :: regex_traits <char32_t>(因此没有std :: basic_regex <char32_t>)?
- 9. 为什么std :: pair没有迭代器?
- 10. 为什么std :: ratio没有值成员?
- 11. 为什么for_each没有std ::前缀
- 12. 为什么std :: cin.getline没有采用std :: string的oveloaded方法?
- 13. 为什么这个std :: bind没有转换成std :: function?
- 14. 为什么没有std :: shared_ptr <T[]>专业化?
- 15. 为什么没有的std ::排序(矢量<T>&)
- 16. 为什么不std :: move在std :: unique_lock上有什么作用?
- 17. std :: to_string,boost :: to_string和boost :: lexical_cast <std::string>有什么区别?
- 18. 为什么std :: packaged_task <void()>无效?
- 19. 什么更好std :: lock_guard <std::mutex>锁(std :: mutex mutex_var);或std :: mutex mutex_var.lock();
- 20. 有没有办法将std :: stack <pointer>转换为std :: stack <const pointer>?
- 21. 为什么std :: move使用std :: remove_reference?
- 22. std :: vector <float> to std :: vector <glm::vecX>没有复制
- 23. std :: transform和std :: for_each有什么区别?
- 24. std :: function和std :: mem_fn有什么区别
- 25. std :: invoke和std :: function有什么区别?
- 26. std :: set和std :: vector有什么区别?
- 27. std :: cout和std :: wcout有什么区别?
- 28. std :: merge和std :: set_union有什么区别?
- 29. std :: partial_sum和std :: inclusive_scan有什么区别?
- 30. 有什么像“std :: and”或“std :: or”?
也许因为['std :: optional'](http://en.cppreference.com/w/cpp/utility/optional)不能通过[allocator]创建(http://en.cppreference .com/w/cpp/concept/Allocator),但['std :: variant'](http://en.cppreference.com/w/cpp/utility/variant)可以吗? –