C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç¨åºæ¯æå·¥å ·
- std::initializer_list
- std::rbegin(std::initializer_list)
- std::rend(std::initializer_list)
- std::initializer_list<T>::initializer_list
- std::initializer_list<T>::size
- std::initializer_list<T>::begin
- std::initializer_list<T>::end
- std::begin(std::initializer_list)
- std::end(std::initializer_list)
- std::apply
- åºç¹æ§æµè¯å® (C++20)
- 彿°å¯¹è±¡
- std::hash
- std::pair
- std::tuple
- std::optional
- std::any
- std::variant
- æ ¼å¼ååº (C++20)
- std::integer_sequence
- std::exchange
- std::make_from_tuple
- std::launder
- std::to_chars
- std::from_chars
- std::as_const
- std::source_location
- å忰彿°
- std::bitset
- std::cmp_equal, cmp_not_equal, cmp_less, cmp_greater, cmp_less_equal, cmp_greater_equal
- std::in_range
- std::declval
- std::forward
- std::move
- std::move_if_noexcept
- std::chars_format
- std::piecewise_construct_t
- std::piecewise_construct
- std::in_place, std::in_place_type, std::in_place_index, std::in_place_t, std::in_place_type_t, std::in_place_index_t
- 注é
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >å·¥å ·åº > std::initializer_list
std::initializer_list
ï¼å¿ä¸æååå§åå¨å表混æ·ï¼
| å®ä¹äºå¤´æä»¶ <initializer_list>
|
||
| template< class T > class initializer_list; |
(C++11 èµ·) | |
std::initializer_list<T> ç±»å对象æ¯ä¸ä¸ªè®¿é® const T ç±»å对象æ°ç»çè½»é代ç对象ã
std::initializer_list 对象å¨è¿äºæ¶åèªå¨æé ï¼
- ç¨è±æ¬å·åå§åå¨å表å表åå§åä¸ä¸ªå¯¹è±¡ï¼å
¶ä¸å¯¹åºæé 彿°æ¥åä¸ä¸ª
std::initializer_liståæ° - ä»¥è±æ¬å·åå§åå¨å表为èµå¼çå³è¿ç®æ°ï¼æå½æ°è°ç¨åæ°ï¼è对åºçèµå¼è¿ç®ç¬¦/彿°æ¥å
std::initializer_liståæ° - ç»å®è±æ¬å·åå§åå¨åè¡¨å° auto ï¼å æ¬å¨èå´ for 循ç¯ä¸
initializer_list å¯ç±ä¸å¯¹æéææéä¸å
¶é¿åº¦å®ç°ãå¤å¶ä¸ä¸ª std::initializer_list ä¸ä¼å¤å¶å
¶åºå±å¯¹è±¡ã
åºå±æ°ç»ä¸ä¿è¯å¨åå§ initializer_list 对象ççåæç»æåç»§ç»åå¨ã std::initializer_list çå卿¯æªæå®çï¼å³å®å¯ä»¥æ¯èªå¨ãä¸´æ¶æéæåªè¯»å
åï¼ä¾èµåºåï¼ã |
(C++14 å) |
| åºå±æ°ç»æ¯ const T[N] ç±»åçä¸´æ¶æ°ç»ï¼å ¶ä¸æ¯ä¸ªå ç´ é½ä»åå§åå§åå¨å表ç对åºå ç´ å¤å¶åå§åï¼é¤éçªå转æ¢éæ³ï¼ãåºå±æ°ç»ççåæä¸ä»»ä½å ¶ä»ä¸´æ¶å¯¹è±¡ç¸åï¼é¤äºä»æ°ç»åå§å initializer_list 对象ä¼å»¶é¿æ°ç»ççåæï¼æ°å¦ç»å®å¼ç¨å°ä¸´æ¶éï¼æä¾å¤ï¼ä¾å¦å¯¹äºåå§åééæç±»æåï¼ãåºå±æ°ç»å¯ä»¥åé å¨åªè¯»å åã | (C++14 èµ·) |
|
è¥å£°æäº |
(C++17 èµ·) |
æåç±»å
| Â | |
| æåç±»å | å®ä¹ |
value_type
|
T |
reference
|
const T& |
const_reference
|
const T& |
size_type
|
std::size_t |
iterator
|
const T* |
const_iterator
|
const T* |
æå彿°
| å建空ç initializer_list (å ¬å¼æå彿°) | |
容é | |
| è¿å initializer_list ä¸çå
ç´ æ°ç® (å ¬å¼æå彿°) | |
è¿ä»£å¨ | |
| è¿åæåé¦å
ç´ çæé (å ¬å¼æå彿°) | |
| è¿åæåæ«å
ç´ åä¸ä½ç½®çæé (å ¬å¼æå彿°) | |
éæå彿°
| ç¹å std::begin (彿°æ¨¡æ¿) | |
| ç¹å std::end (彿°æ¨¡æ¿) | |
| å®ä¹äºå¤´æä»¶
<iterator> | |
| ç¹å std::rbegin (彿°) | |
| (C++14) |
ç¹å std::rend (彿°) |
示ä¾
è¿è¡æ¤ä»£ç
#include <iostream> #include <vector> #include <initializer_list>  template <class T> struct S { std::vector<T> v; S(std::initializer_list<T> l) : v(l) { std::cout << "constructed with a " << l.size() << "-element list\n"; } void append(std::initializer_list<T> l) { v.insert(v.end(), l.begin(), l.end()); } std::pair<const T*, std::size_t> c_arr() const { return {&v[0], v.size()}; // å¨ return è¯å¥ä¸å¤å¶å表åå§å // è¿ä¸ä½¿ç¨ std::initializer_list } };  template <typename T> void templated_fn(T) {}  int main() { S<int> s = {1, 2, 3, 4, 5}; // å¤å¶åå§å s.append({6, 7, 8}); // 彿°è°ç¨ä¸çå表åå§å  std::cout << "The vector size is now " << s.c_arr().second << " ints:\n";  for (auto n : s.v) std::cout << n << ' '; std::cout << '\n';  std::cout << "Range-for over brace-init-list: \n";  for (int x : {-1, -2, -3}) // auto çè§å令æ¤å¸¦èå´ for å·¥ä½ std::cout << x << ' '; std::cout << '\n';  auto al = {10, 11, 12}; // auto çç¹æ®è§å  std::cout << "The list bound to auto has size() = " << al.size() << '\n';  // templated_fn({1, 2, 3}); // ç¼è¯é误ï¼â {1, 2, 3} â䏿¯è¡¨è¾¾å¼ï¼ // 宿 ç±»åï¼æ T æ æ³æ¨å¯¼ templated_fn<std::initializer_list<int>>({1, 2, 3}); // OK templated_fn<std::vector<int>>({1, 2, 3}); // ä¹ OK }
è¾åºï¼
constructed with a 5-element list The vector size is now 8 ints: 1 2 3 4 5 6 7 8 Range-for over brace-init-list: -1 -2 -3 The list bound to auto has size() = 3