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