類型雙關

類型雙關是計算機科學的術語,指任何編程技術能顛覆或者繞過一門程式設計語言的類型系統,以達成在形式語言內部難以甚至不可能實現的效果。

簡介

C語言與C++語言,語法結構如類型轉換與union,以及C++增加的reinterpret_cast運算符,用於實現類型雙關。

Pascal語言使用records與variants來按照多種方法處理特定數據類型。

Socket例子

Berkeley sockets使用類型雙關來處理IP位址。函式bind綁定一個位初始化的套接字到一個IP位址,其聲明如下:

bind函式通常如此使用:

這是因為struct sockaddr_in與struct sockaddr有相同的記憶體布局。兩個類型的指針可以互相轉換。

浮點例子

類型雙關不僅限於struct。對於浮點數,判斷其是否為負值:

注意有一些特例,如x是負0,前一種實現返回false而第二種實現返回true.

這樣的實現適合於實時計算而又不能被最佳化實現的情形。注意把所有假定均寫為注釋記錄下來,並寫入靜態斷言(static assertions)驗證可移植期望是否滿足。雷神之錘III競技場遊戲用此方法實現平方根倒數速算法。

使用union

為了遵循C99/C++的嚴格別名規則,可以使用union:

GCC編譯器支持這樣的語言擴展。

相關詞條

熱門詞條

聯絡我們