[C++, CPP 教學 教程 教材 Tutorial] 基本資料型態(Fundamental Data Type) - 型態轉換(Type Cast)
YehYeh\'s Notepad yehyeh@gmail.com 

[C++, CPP] 基本資料型態(Fundamental Data Type)

型態轉換(Type Cast)

  • 型態轉換分成由編譯器自動轉型的隱式轉型及程式設計師用轉型運算子轉型的強制轉型
  • 隱式轉型又可分為:
    • 提升(Promotion):將較小的資料型態轉為較大的資料型態(小轉大)
    • 截斷:將較大的資料型態轉為較小的資料型態,會捨棄部份內容(大轉小)
  • C++進行運算時,若運算元型態不同,則要將型態都提升和較大運算元相同才可進行運算
  • 若將型態較大的值指派給型態較小的變數,則編譯器會自動進行截斷
    轉型
  • 隱式轉型的時機:
    • 不同型態的指派
      • 將浮點數指派給整數,小數部份強制去除
        float a=5.7;
        int b=a; //結果b=5
        
    • 多種型態的運算
      • 浮點數和整數相加
        float a=5.3;
        int b=3;
        a = a + b;
        
    • 傳遞和函式宣告的型態不同的引數給函式時
      • 函式沒有原型宣告時,為了和傳統C相容,char和short型態的引數會提升為int型態,float型態的引數會提升為double
      • 函式宣告為整數,傳遞浮點數給函式
        float a = 5.3; 
        func1(a);
                                              
        void func1(int num)  { }
        
  • C式轉型:強制轉型的一種
    • (資料型態) 資料 資料型態 (資料)
    • 將浮點數轉型成整數
      float num1 = 3.5;
      int num2 = (int) num1;	 //將num1先由float轉型成int,再存到num2
      
  • C++新式強式轉型:讓轉型看起來像函式呼叫
    • 資料型態 (資料)
    • 將浮點數轉型成整數
      float num1 = 3.5; 
      int num2 = int (num1);  //將num1先由float轉型成int,再存到num2
      
  • 轉型運算子(Cast Operator)
    • static_cast:轉換資料型態
      • static_cast<資料型態>(資料)
      • 將浮點數轉成整數
        float num1 = 3.5;
        int num2 = static_cast<int>(num1);  //將num1先由float轉型成int,再存到num2  
        
    • const_cast:轉換指標或參考的常數性 把常數變數轉成非常數變數
    • dynamic_cast:轉換類別繼承體系中的物件指標或參考
    • reinterpret_cast:轉換無關聯的資料型態
  • 下列兩式有相同的意義
    • long evenNum = 2 * static_cast<long>(std::rand( ));
      long evenNum = 2L * std::rand( );