static_cast
外觀
static_cast
是C++編程語言中的一個標識符,是用於模式轉換的運算符。[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
)轉換為數值(例如int
或float
)。
雖然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;
參考資料
[編輯]- ^ Programming: Principles and Practice Using C++. New Jersey, US: Addison-Wesley. 2009: 594. ISBN 978-0321543721. OCLC 988823060.
- ^ Eckel, Bruce. Thinking in C++. New Jersey, US: Prentice Hall. 2000: 857. ISBN 0-13-979809-9.
- ^ Prada, Stephen. C++ Primer Plus. New Jersey, US: Pearson Education, Inc. 2015: 107. ISBN 978-7-115-38111-8.