C++ 速查手冊 V1.00 - 單元 12.2 - 強制型態轉換




顯性型態轉換規則 (explicit conversion) 包括具名強制轉型 (named cast) 及舊式轉型 (old-style cast) ,可以任意強制將某個型態轉換成另一個型態,前者具名強制轉型的形式如下


    cast-name<type>(expression)

cast-name 有以下種類


  • dynamic_cast
  • const_cast
  • static_cast
  • reinterpret_cast

如下例


001 #include <iostream>
002  
003 int main() {
004    char a = 'a';
005    int b = 97;
006
007    std::cout << a
008              << std::endl;
009    std::cout << b
010              << std::endl
011    std::cout << static_cast<char>(b)
012              << std::endl;
013    std::cout << static_cast<int>(a)
014              << std::endl;
015
016    return 0;
017 }
018
019 /* Kaiching Chang
020    u1202.cpp
021    2014-02 */

編譯後執行,結果如下


$ g++ u1202.cpp
$ ./a.out
a
97
a
97
$

第 11 行強制將整數 97 改以字元型態印出


011 std::cout << static_cast<char>(b)

而第 13 行強制將字元 'a' 改以整數型態印出


013 std::cout << static_cast<int>(a)

至於舊式轉型則是利用小括弧圍住型態型稱,然後放置在某一變數或運算式之前,便可將該變數強制轉換成小括弧的資料型態。


形式如下


    (type) (expression)

使用顯性型態轉換須注意,通常從可儲存範圍大的資料型態轉換成儲存範圍小的資料型態,例如從 long 轉換成 short ,常常會造成資料的流失,因此須小心使用。


continue ...

沒有留言: