顯性型態轉換規則 (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 ...
沒有留言:
張貼留言