官术网_书友最值得收藏!

  • 21天學通C++
  • 陳龍等編著
  • 572字
  • 2018-12-29 13:31:59

2.4 類型轉換

類型轉換是用來把一個類型的值轉換成另一個類型。C++是強類型的語言,即其每一個值都有它相應的類型。當用戶需要把一個值轉換為另一個類型時,就需要使用一些方式進行類型轉換。C++中,支持隱式轉換和顯式轉換兩種。

2.4.1 隱式轉換

隱式轉換就是系統(tǒng)默認的,不需要加以聲明就可以進行的轉換。在隱式轉換過程中,編譯器無須對轉換進行詳細檢查就能夠安全地執(zhí)行轉換。比如從int類型轉換到long類型就是一種隱式轉換。隱式轉換一般不會失敗,轉換過程中也不會導致信息丟失。

【范例2-8】隱式轉換的實現(xiàn)。該范例實現(xiàn)數據類型的隱式轉換,將字符型變量轉換為整型變量,實現(xiàn)代碼如代碼清單2-8所示。

代碼清單2-8

        1   #include <iostream.h>
        2   void main()
        3   {
        4        char ch;                               //聲明字符型變量
        5        ch='a';
        6        int i=ch;                              //聲明整型變量并賦初值,隱式轉換
        7        cout<<ch<<endl;                        //輸出
        8        cout<<i<<endl;
        9   }

【運行結果】在Visual C++中創(chuàng)建一個【C++ Source File】,將上述代碼輸入其中,輸出結果如圖2-13所示。

圖2-13 隱式轉換

【范例解析】范例2-8程序中,聲明了一個字符型變量ch和一個整型變量i,并在聲明變量i的同時給其賦初值ch的值,此處就需要將字符型的值轉換為整型值,Visual C++編譯器自動實現(xiàn)了其之間的轉換,稱為隱式轉換。

提示:圖2-13中輸出整型變量i的值為97,這是因為字母a對應的ASCII碼值為97。由此可看出,字符型和整型數據類型之間可以相互轉換。

2.4.2 顯式轉換

通常,隱式轉換意味著編譯器認為轉換是合理的或者是安全的。此外,C++還支持顯式轉換,顯式轉換是用戶手動指出需要轉換的類型。顯式轉換意味著編譯器能夠找到一個轉換方式,但是它不保證這個轉換是否安全,而是需要程序員額外指出。

C++的顯式轉換提供了更精確的語義和對其進一步擴展的可能。在C語言中,讀者可以用一個簡單的(int)來完成2.4.1節(jié)中字符型到整型的轉換。

【范例2-9】顯式轉換的實現(xiàn)。該范例實現(xiàn)了數據類型之間的顯式轉換,將字符型變量通過()符顯式轉換為整型變量,實現(xiàn)代碼如代碼清單2-9所示。

代碼清單2-9

        1   #include <iostream.h>
        2   void main()
        3   {
        4        char ch;                               //聲明字符型變量
        5        ch='a';
        6        int i;                                 //聲明整型變量并賦初值
        7        i=(int)ch;                             //顯式轉換
        8        cout<<ch<<endl;                        //輸出
        9        cout<<i<<endl;
        10  }

【運行結果】在Visual C++中創(chuàng)建一個【C++ Source File】,將上述代碼輸入其中,輸出結果如圖2-14所示。

圖2-14 顯式轉換

【范例解析】范例2-9代碼中,使用了語句“i=(int)ch;”將字符型變量ch的類型強制轉換為整型,其運行后的效果與如圖2-13所示相同。事實上,C++中為顯式類型轉換提供了四種不同的操作符:static_case、dynamic_cast、const_cast、reinterpret_cast。

注意:C++的顯式轉換通過區(qū)分各種轉換情況來增加安全性:通過const_cast來取消const、volatile之類的修飾,通過static_cast來做相關類型的轉換,通過reinterpret_cast來做低級的轉換等。

主站蜘蛛池模板: 登封市| 天峻县| 正蓝旗| 三河市| 炉霍县| 桐柏县| 平江县| 淮安市| 天长市| 克山县| 昭通市| 皋兰县| 无棣县| 平顺县| 兴宁市| 汝州市| 肥西县| 民乐县| 浠水县| 西宁市| 安多县| 北安市| 庆安县| 桑植县| 西乌| 宁晋县| 珠海市| 黑山县| 苍南县| 汉寿县| 宜黄县| 当涂县| 樟树市| 富川| 普洱| 丹棱县| 腾冲县| 常宁市| 武安市| 萨迦县| 铁力市|