static_castC++程式語言中的一個標識符,是用於模式轉換運算符[1]


語法

編輯
static_cast<type> (object);

其中,type是類型標識符,object是待轉換的變量名稱(其類型標識不需要在這裏聲明)。


需要注意的是static_cast要求編譯器必須能夠通過已知的方法將object從其原有的類型轉換為type類型(不管是通過內置方法 (builtin) 還是轉換方法 (cast))。類型可以是引用 (reference) 或者是枚舉器 (enumerator)。static_cast的適用範圍比較廣泛,任何編譯器定義明確的、允許轉換的類型都可以使用它來相互轉換。[2]


static_cast可以在如下場景中使用:

  • 把一個指向基類 (base class) 的指針轉換為指向非虛派生類 (non-virtual derived class) 的指針;
  • 把數值類型的數據(但不是數值,例如enum)轉換為數值(例如intfloat)。


雖然static_cast會在編譯時檢查 (compiler-time checked) 以防止出現明顯的不兼容或錯誤現象;但是,其不會在運行時檢查 (run-time checking) 不明顯的不兼容現象(例如指針之間的轉換)。舉一個例子,我們假定一個static_cast將一個類指針B轉換為一個派生類指針D,如果B是派生類D模糊或不可訪問的基類,那麼static_cast就是錯誤的。再比如,一個指向虛基類的指針,或者指向虛基類的基類的指針,用static_cast轉換為指向派生類的指針就是錯誤的。


另外,static_cast是可以返回數值的,例如以下代碼是合法的[3]

long var = 1000;
std::cout << static_cast<int> (var) << std::endl;

參考資料

編輯
  1. ^ Programming: Principles and Practice Using C++. New Jersey, US: Addison-Wesley. 2009: 594. ISBN 978-0321543721. OCLC 988823060. 
  2. ^ Eckel, Bruce. Thinking in C++ . New Jersey, US: Prentice Hall. 2000: 857. ISBN 0-13-979809-9. 
  3. ^ Prada, Stephen. C++ Primer Plus. New Jersey, US: Pearson Education, Inc. 2015: 107. ISBN 978-7-115-38111-8.