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)可以嗎? –