<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 預防窄轉換 > (譯注:“窄轉換”是我見到過的一個翻譯術語,但我忘記是在那本書上看到的。此處也可譯為“預防類型截斷”或者“預防類型切割”。) 問題現象:C和C++會進行隱式的(類型)截斷 ``` int x = 7.3; // 啊哦! void f(int); f(7.3); // 啊哦! ``` 但是,在C++11中,使用{}進行初始化不會發生這種窄轉換(譯注:也就是使用{}對變量進行初始化時,不會進行隱式的類型截斷,編譯器會產生一個編譯錯誤,防止隱式的類型截斷的發生。): ``` int x0 {7.3}; // 編譯錯誤: 窄轉換 int x1 = {7.3}; // 編譯錯誤:窄轉換 double d = 7; int x2{d}; // 編譯錯誤:窄轉換(double類型轉化為int類型) char x3{7}; // OK:雖然7是一個int類型,但這不是窄轉換 vector vi = {1, 2.3, 4, 5.6}; //錯誤:double至int到窄轉換 ``` C++11避免許多不兼容性的方法是在進行窄轉換時盡可能地依賴于用于初始化的實際值(如上例中的7),而非僅僅依賴于變量類型作判斷。如果一個值可以無損地用目標類型來存放,那么就不存在窄轉換。 ``` // OK: 7是一個int類型的數據,但是它可以被無損地表達為char類型數據 char c1{7}; // error: 發生了窄轉換,初始值超出了char類型的范圍 char c2{77777}; ``` 請注意,double至int類型的轉換通常都會被認為是窄轉換,即使從7.0轉換至7。 > (評注:“{}初始化”對于類型轉換的處理增強了C++靜態類型系統的安全性。傳統的C/C++中依賴于編程人員的初始化類型安全檢查在C++11中通過“{}初始化”由編譯器實施。) 參考: * 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).
                  <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>

                              哎呀哎呀视频在线观看