C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- å¹¶è¡æ©å±
- å¹¶è¡æ©å±ï¼çæ¬ 2
- std::experimental::sample
- std::experimental::to_array
- std::experimental::source_location
- std::experimental::not_fn
- std::experimental::future
- std::experimental::shared_future
- C++ æ ååºæ©å±
- std::experimental::pmr::resource_adaptor
- std::experimental::invocation_type, std::experimental::raw_invocation_type
- C++ æ ååºæ©å±ï¼çæ¬ 2
- std::experimental::propagate_const
- std::experimental::ostream_joiner
- std::experimental::randint
- std::experimental::observer_ptr
- std::experimental::is_detected, std::experimental::detected_t, std::experimental::detected_or
- C++ æ ååºæ©å±ï¼çæ¬ 3
- std::experimental::scope_exit
- std::experimental::scope_fail
- std::experimental::scope_success
- std::experimental::unique_resource
- å¹¶åæ©å±
- å¶çº¦ä¸æ¦å¿µ
- èå´æ©å±
- std::experimental::function
- std::experimental::nonesuch
- std::experimental::reseed
- std::experimental::shuffle
- std::experimental::when_all
- std::experimental::barrier
- std::experimental::latch
- std::experimental::make_array
- æ°å¦ç¹æ®å½æ°
- æä»¶ç³»ç»åº
- std::experimental::erased_type
- std::experimental::when_any
- std::experimental::make_ready_future
- std::experimental::make_exceptional_future
- std::experimental::flex_barrier
- 注é
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >å®éªæ§ C++ ç¹æ§ > std::experimental::make_array
std::experimental::make_array
| å®ä¹äºå¤´æä»¶ <experimental/array>
|
||
| template <class D = void, class... Types> constexpr std::array<VT /* see below */, sizeof...(Types)> make_array(Types&&... t); |
(åºåºç¡ TS v2) | |
å建ä¸ä¸ª std::array ï¼å ¶å¤§å°çäºåæ°æ°éï¼ä¸å ¶å ç´ ä»å¯¹åºåæ°åå§åãè¿å std::array<VT, sizeof...(Types)>{std::forward<Types>(t)...}
è¥ D 为 void ï¼åæ¨åºçç±»å VT 为 std::common_type_t<Types...> ãå¦åï¼ç±»å为 D ã
è¥ D 为 void ï¼ä¸ std::decay_t<Types>... ä¸ä»»æä¸è
æ¯ std::reference_wrapper çç¹åï¼åç¨åºä¸ºç
æã
å¯è½çå®ç°
namespace details { template<class> struct is_ref_wrapper : std::false_type {}; template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {}; Â template<class T> using not_ref_wrapper = std::experimental::negation<is_ref_wrapper<std::decay_t<T>>>; Â template <class D, class...> struct return_type_helper { using type = D; }; template <class... Types> struct return_type_helper<void, Types...> : std::common_type<Types...> { static_assert(std::experimental::conjunction_v<not_ref_wrapper<Types>...>, "Types cannot contain reference_wrappers when D is void"); }; Â template <class D, class... Types> using return_type = std::array<typename return_type_helper<D, Types...>::type, sizeof...(Types)>; } Â template < class D = void, class... Types> constexpr details::return_type<D, Types...> make_array(Types&&... t) { return {std::forward<Types>(t)... }; } |
示ä¾
è¿è¡æ¤ä»£ç
#include <experimental/array> #include <iostream> #include <type_traits> Â int main() { auto arr = std::experimental::make_array(1, 2, 3, 4, 5); bool is_array_of_5_ints = std::is_same<decltype(arr), std::array<int, 5>>::value; std::cout << "Returns an array of five ints? "; std::cout << std::boolalpha << is_array_of_5_ints << '\n'; }
è¾åºï¼
Returns an array of five ints? true
åé
| ä»å
建æ°ç»å建 std::array 对象 (彿°æ¨¡æ¿) |