<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 初始化列表 考慮如下代碼: ``` vector<double> v = { 1, 2, 3.456, 99.99 }; list<pair<string,string>> languages = { {"Nygaard","Simula"}, {"Richards","BCPL"}, {"Ritchie","C"} }; map<vector<string>,vector<int>> years = { { {"Maurice","Vincent", "Wilkes"}, {1913, 1945, 1951, 1967, 2000} }, { {"Martin", "Ritchards"}, {1982, 2003, 2007} }, { {"David", "John", "Wheeler"}, {1927, 1947, 1951, 2004} } }; ``` 現在,初始化列表不再僅限于數組。可以接受一個“{}列表”對變量進行初始化的機制實際上是通過一個可以接受參數類型為std::initializer_list的函數(通常為構造函數)來實現的。例如: ``` void f(initializer_list<int>); f({1,2}); f({23,345,4567,56789}); f({}); // 以空列表為參數調用f() f{1,2}; // 錯誤:缺少函數調用符號( ) years.insert({{"Bjarne","Stroustrup"},{1950, 1975, 1985}}); ``` 初始化列表可以是任意長度,但必須是同質的(所有的元素必須屬于某一模板類型T, 或可轉化至T類型的)。 容器可以用如下方式來實現“初始化列表構造函數”: ``` template<class E> class vector { public: // 初始化列表構造函數 vector (std::initializer_list<E> s) { // 預留出合適的容量 reserve(s.size()); // // 初始化所有元素 uninitialized_copy(s.begin(), s.end(), elem); sz = s.size(); // 設置容器的size } // ... 其他部分保持不變 ... }; ``` 使用“{}初始化”時,直接構造與拷貝構造之間仍有細微差異,但不再像以前那樣明顯。例如,std::vector擁有一個參數類型為int的顯式構造函數及一個帶有初始化列表的構造函數: ``` vector<double> v1(7); // OK: v1有7個元素<br /> v1 = 9; // Err: 無法將int轉換為vector vector<double> v2 = 9; // Err: 無法將int轉換為vector void f(const vector<double>&); f(9); // Err: 無法將int轉換為vector vector<double> v1{7}; // OK: v1有一個元素,其值為7.0 v1 = {9}; // OK: v1有一個元素,其值為9.0 vector<double> v2 = {9}; // OK: v2有一個元素,其值為9.0 f({9}); // OK: f函數將以列表{9}為參數被調用 vector<vector<double>> vs = { vector<double>(10), // OK, 顯式構造(10個元素,都是默認值0.0) vector<double>{10}, // OK:顯式構造(1個元素,值為10.0) 10 // Err :vector的構造函數是顯式的 }; ``` 函數可以將initializer_list作為一個不可變的序列進行讀取。例如: ``` void f(initializer_list<int> args) { for (auto p=args.begin(); p!=args.end(); ++p) cout << *p << "\n"; } ``` 僅具有一個std::initializer_list的單參數構造函數被稱為初始化列表構造函數。 標準庫容器,string類型及正則表達式均具有初始化列表構造函數,以及(初始化列表)賦值函數等。初始化列表亦可作為一種“序列”以供“序列化for語句”使用。(譯注:參見“序列for循環語句”章節) 初始化列表同時也是“統一初始化”方案的一部分。(譯注:參見“統一初始化的語法和語義”章節) 參考: * the C++ draft 8.5.4 List-initialization [dcl.init.list] * [N1890=05-0150 ] Bjarne Stroustrup and Gabriel Dos Reis: [Initialization and initializers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1890.pdf) (an overview of initialization-related problems with suggested solutions). * [N1919=05-0179] Bjarne Stroustrup and Gabriel Dos Reis: [Initializer lists](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1919.pdf). * [N2215=07-0075] Bjarne Stroustrup and Gabriel Dos Reis : [Initializer lists (Rev. 3)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2215.pdf) . * [N2640=08-0150] Jason Merrill and Daveed Vandevoorde: [Initializer Lists — Alternative Mechanism and Rationale (v. 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2640.pdf) (final proposal). (翻譯:dabaitu)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看