最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中的std::initializer_list使用解讀

 更新時間:2023年07月14日 09:09:26   作者:一傾而盡  
這篇文章主要介紹了C++中的std::initializer_list使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

C++中的std::initializer_list

initializer_list是C++11提供的一種新類型,其定義于頭文件<initializer_list>中,此頭文件是工具庫的一部分,

<initializer_list>定義如下:

namespace std {
  template<class E> class initializer_list {
  public:
    using value_type = E;
    using reference = const E&;
    using const_reference = const E&;
    using size_type = size_t;
    using iterator = const E*;
    using const_iterator = const E*;
    constexpr initializer_list() noexcept;
    constexpr size_t size() const noexcept; // 元素數(shù)量
    constexpr const E* begin() const noexcept; // 首元素
    constexpr const E* end() const noexcept; // 末元素后一位置
  };
  // initializer_list 范圍訪問
  template<class E> constexpr const E* begin(initializer_list<E> il) noexcept;
  template<class E> constexpr const E* end(initializer_list<E> il) noexcept;
}

std::initializer_list 類型對象是一個訪問 const T 類型對象數(shù)組的輕量代理對象。

std::initializer_list 對象在這些時候自動構(gòu)造:

  • 用花括號初始化器列表列表初始化一個對象,其中對應構(gòu)造函數(shù)接受一個std::initializer_list 參數(shù)
  • 以花括號初始化器列表為賦值的右運算數(shù),或函數(shù)調(diào)用參數(shù),而對應的賦值運算符/函數(shù)接受 std::initializer_list 參數(shù)
  • 綁定花括號初始化器列表到 auto ,包括在范圍 for 循環(huán)中

initializer_list 可由一對指針或指針與其長度實現(xiàn)。復制一個 std::initializer_list 不會復制其底層對象。

底層數(shù)組不保證在原始 initializer_list 對象的生存期結(jié)束后繼續(xù)存在。 std::initializer_list 的存儲是未指定的(即它可以是自動、臨時或靜態(tài)只讀內(nèi)存,依賴場合)。 (C++14 前)

底層數(shù)組是 const T[N] 類型的臨時數(shù)組,其中每個元素都從原始初始化器列表的對應元素復制初始化(除非窄化轉(zhuǎn)換非法)。底層數(shù)組的生存期與任何其他臨時對象相同,除了從數(shù)組初始化 initializer_list 對象會延長數(shù)組的生存期,恰如綁定引用到臨時量(有例外,例如對于初始化非靜態(tài)類成員)。底層數(shù)組可以分配在只讀內(nèi)存。 (C++14 起)

若聲明了 std::initializer_list 的顯式或偏特化則程序為病式。

1.成員類型

成員類型定義
value_typeT
referenceconst T&
const_referenceconst T&
size_typestd_size_t
iteratorconst T*
const_iteratorconst T*

2.成員函數(shù)

構(gòu)造函數(shù)

initializer_list() noexcept;(C++11 起) (C++14 前)
constexpr initializer_list() noexcept;(C++14 起)
#include <iostream>
#include <initializer_list>
int main(){
    std::initializer_list<int> empty_list;
    std::cout << "empty_list.size(): " << empty_list.size() << '\n';
    // 用列表初始化創(chuàng)建初始化器列表
    std::initializer_list<int> digits {1, 2, 3, 4, 5};
    std::cout << "digits.size(): " << digits.size() << '\n';
    // auto 的特殊規(guī)則表示‘ fraction '擁有類型
    // type std::initializer_list<double>
    auto fractions = {3.14159, 2.71828};
    std::cout << "fractions.size(): " << fractions.size() << '\n';
}

結(jié)果如下:

  • size :返回initializer_list中元素數(shù)目
  • begin:返回指向首元素的指針
  • end:返回指向末尾元素后一位置的指針

3.非成員函數(shù)

std::begin(std::initializer_list) (C++11)特化 std::begin
std::end(std::initializer_list)(C++11) 定義于頭文件特化std::end
rbegin(std::initializer_list) (C++14)特化std::rbegin
rend(std::initializer_list)(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});      // 函數(shù)調(diào)用中的列表初始化
    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 的規(guī)則令此帶范圍 for 工作
        std::cout << x << ' ';
    std::cout << '\n';
    auto al = {10, 11, 12};   // auto 的特殊規(guī)則
    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
}

結(jié)果如下:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ 操作系統(tǒng)內(nèi)存分配算法的實現(xiàn)詳解

    C++ 操作系統(tǒng)內(nèi)存分配算法的實現(xiàn)詳解

    本文主要介紹了在動態(tài)分區(qū)管理方式下采用不同的分配算法實現(xiàn)主存分配和實現(xiàn)主存回收,旨在幫助學生理解在動態(tài)分區(qū)管理方式下應怎樣實現(xiàn)主存空間的分配和回收。感興趣的可以了解一下
    2021-11-11
  • C++快速排序算法簡明理解

    C++快速排序算法簡明理解

    快速排序由于排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經(jīng)常被采用,再加上快速排序思想----分治法也確實實用,因此很多軟件公司的筆試面試,包括像騰訊,微軟等知名IT公司都喜歡考這個,還有大大小的程序方面的考試如軟考,考研中也常常出現(xiàn)快速排序的身影
    2022-05-05
  • C++ Boost多線程和并發(fā)教程分享

    C++ Boost多線程和并發(fā)教程分享

    這篇文章主要介紹了C++ Boost多線程和并發(fā)教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-05-05
  • C++實現(xiàn)raw_input的方法

    C++實現(xiàn)raw_input的方法

    這篇文章主要介紹了C++實現(xiàn)raw_input的方法,通過C++來實現(xiàn)Python中發(fā)raw_input的方法,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • VScode中文亂碼問題解決辦法(C語言)

    VScode中文亂碼問題解決辦法(C語言)

    遇到VSCode中文亂碼的問題確實會讓人感到困擾,不過別擔心,我們可以一步步來解決這個問題,這篇文章主要介紹了VScode中文亂碼問題解決辦法的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • C語言形參和實參的區(qū)別詳解

    C語言形參和實參的區(qū)別詳解

    在函數(shù)定義和調(diào)用過程中,形參和實參是非常重要的概念,本文主要介紹了C語言形參和實參的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • C++實現(xiàn)stack與queue數(shù)據(jù)結(jié)構(gòu)的模擬

    C++實現(xiàn)stack與queue數(shù)據(jù)結(jié)構(gòu)的模擬

    stack是一種容器適配器,專門用在具有后進先出操作的上下文環(huán)境中,其刪除只能從容器的一端進行 元素的插入與提取操作;隊列是一種容器適配器,專門用于在FIFO上下文(先進先出)中操作,其中從容器一端插入元素,另一端提取元素
    2023-04-04
  • 淺談c++ 字符類型總結(jié)區(qū)別wchar_t,char,WCHAR

    淺談c++ 字符類型總結(jié)區(qū)別wchar_t,char,WCHAR

    下面小編就為大家?guī)硪黄獪\談c++ 字符類型總結(jié)區(qū)別wchar_t,char,WCHAR。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • C++ deque/queue/stack的底層原理解析

    C++ deque/queue/stack的底層原理解析

    這篇文章主要介紹了C++ deque/queue/stack的底層原理解析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • c++統(tǒng)計文件中字符個數(shù)代碼匯總

    c++統(tǒng)計文件中字符個數(shù)代碼匯總

    本文給大家匯總介紹了3種使用C++實現(xiàn)統(tǒng)計文件中的字符個數(shù)的方法,非常的簡單實用,有需要的小伙伴可以參考下。
    2015-09-09

最新評論

遵化市| 将乐县| 丽江市| 泾源县| 威信县| 井冈山市| 威远县| 喀什市| 南漳县| 淄博市| 长汀县| 邓州市| 临西县| 松桃| 千阳县| 西吉县| 萨嘎县| 韶山市| 韶山市| 辛集市| 吉安县| 油尖旺区| 阿克苏市| 丰镇市| 淮滨县| 阿勒泰市| 岱山县| 定安县| 襄汾县| 广水市| 芷江| 乐至县| 博客| 垫江县| 右玉县| 江山市| 张家界市| 临朐县| 衡阳县| 新巴尔虎右旗| 屯门区|