β’ Π’ΠΈΠΏ int Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 16 Π±ΠΈΡΠΎΠ².
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ Π½ΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ, Π½ΠΈ ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π΄Π»Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ. Π’Π°ΠΊ ΡΡΠΎ Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ.
β’ Π Π°Π·ΠΌΠ΅Ρ int Π½Π΅ ΡΠ°Π²Π΅Π½ Π½ΠΈ 32 Π±ΠΈΡΠ°ΠΌ, Π½ΠΈ ΠΊΠ°ΠΊΠΎΠΌΡ-Π»ΠΈΠ±ΠΎ ΠΈΠ½ΠΎΠΌΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ.
β’ Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ Π² Π΄ΡΡΠ³Π°.
β’ Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΡΠ»Π΅Π½ΠΎΠ² Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
β’ ΠΠ΅ΠΆΠ΄Ρ ΡΠ»Π΅Π½Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° (Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ POD) ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΈ Π² ΡΠ΅Π»ΡΡ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ.
β’ offsetof ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ POD, Π½ΠΎ Π½Π΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ² (Ρ ΠΎΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ).
β’ ΠΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΊΡΡΡΡΠ΅ ΠΏΠΎΠ»Ρ.
β’ Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°. ΠΡΠ»ΠΈ Π΄Π²Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ ΠΈΠ½Π°ΡΠ΅.
β’ ΠΠ΅Π»ΡΠ·Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π½Π° Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ° ΡΡΠ΅ΠΊΠ°.
β’ Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ, ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ void*, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ API Π·Π°ΡΡΠ°Π²Π»ΡΡΡ Π²Π°Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ.
β’ ΠΠ·-Π·Π° Π²ΠΎΠΏΡΠΎΡΠΎΠ² Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΎΡΡΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΠΈΠΏΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ Π±ΠΈΡΠ°ΠΌΠΈ, ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΈ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ. ΠΠΎΠ΄Π΅Π»Ρ ΠΏΠ°ΠΌΡΡΠΈ Π‘++ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΡΠ°Π±ΠΎΡΡ, Π½Π΅ Π·Π°ΡΡΠ°Π²Π»ΡΡ Π²Π°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. Π’Π°ΠΊ ΠΈ Π½Π΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎΠ³ΠΎ.
Π‘ΡΡΠ»ΠΊΠΈ[Dewhurst03] Β§95
92. ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ reinterpret_cast
ΠΠ°ΠΊ Π³Π»Π°ΡΠΈΡ ΡΠΈΠΌΡΠΊΠ°Ρ ΠΏΠΎΡΠ»ΠΎΠ²ΠΈΡΠ°, Ρ Π»ΠΆΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ Π½ΠΎΠ³ΠΈ. ΠΠ΅ ΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ reinterpret_cast, ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π±ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΊΠ°ΠΊ Π±ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π’Π°ΠΊΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ².
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅: ΠΡΠ»ΠΈ Π²Ρ Π»ΠΆΠ΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΌΡΡΠΈΡΡ (ΠΠ΅Π½ΡΠΈ Π‘ΠΏΠ΅Π½ΡΠ΅Ρ).
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ reinterpret_cast ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ, Ρ.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π·Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ½ Π»ΡΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π·Π½Π°Π΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠ»ΡΠ° ΡΠ΄Π΅Π»Π°Π΅Ρ ΡΠΎ, ΡΡΠΎ Π²Ρ Π΅ΠΌΡ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅, Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ°ΠΊΡΡ Π³ΡΡΠ±ΡΡ ΡΠΈΠ»Ρ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ β ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π΄Π΅Π»ΠΎ. ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ Π²Π»ΠΈΡΡΡ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ°ΠΊΠΎΠ²Π°, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ reinterpret_cast Π΅ΡΠ΅ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΠΈΠ»ΡΡΡΠ²Π΅Π½Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ Π±ΠΈΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ° (ΡΡΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅Ρ ΠΎΡΠΎΡΠΎ). ΠΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ reinterpret_cast Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ ΡΠΎΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΈ Π½Π΅ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ³ΡΡ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π²Π°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ reinterpret_cast ΠΊ ΠΏΠΎΡΠΎΠΊΡ Π±ΠΈΡΠΎΠ², ΠΏΡΠΎΡ ΠΎΠ΄ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΡ, ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» Π² Π°Π΄ΡΠ΅ΡΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°ΠΊΠΎΠ΅ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΆΠ΅ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΡΡΡΡΡ Π·Π° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΡ , ΡΡΠΎΠ±Ρ Π²Π°Ρ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ Π²Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ Π½Π΅ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ², Π»ΡΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ void* Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ reinterpret_cast, Ρ.Π΅. Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ΄Π°
T1* p1 = ... ;
T2* p2 = reinterpret_cast<T2*>(p1);
Π»ΡΡΡΠ΅ ΠΏΠΈΡΠ°ΡΡ
T1* p1 = ...;
void* pV = p1;
T2* p2 = static_cast<T2*>(pV);
Π‘ΡΡΠ»ΠΊΠΈ[Π‘++03] Β§5.2.10(3) β’ [Dewhurst03] Β§39 β’ [Stroustrup00] Β§5.6
93. ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ static_cast ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌ
Π ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ static_cast. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ β ΠΎΡ dynamic_cast Π΄ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅ ΠΎ Π·Π°ΠΌΠ΅Π½Π΅ static_cast Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ dynamic_cast, ΠΈ Π²Π°ΠΌ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ, Π² ΠΊΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ static_cast Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ, Π° Π² ΠΊΠ°ΠΊΠΈΡ β ΡΡΠ΅Π²Π°ΡΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΡΠΌΠΈ. Π₯ΠΎΡΡ dynamic_cast ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² (Π½ΠΎ Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ 8). ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ static_cast Π²ΠΌΠ΅ΡΡΠΎ dynamic_cast Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π½Π° Π½ΠΎΡΠ½ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΈΠ³ΡΡΡ Π΄ΠΎΠ»Π»Π°ΡΠ° Π² Π³ΠΎΠ΄ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π»ΠΎΠΌΠ°Π½Π½ΡΠΌΠΈ Π½ΠΎΠ³Π°ΠΌΠΈ.
ΠΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ΅ΡΠ΅ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΠΉΡΠ΅ Π²Π°Ρ ΠΊΠΎΠ΄ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ°Π»ΠΎ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΠΌ. ΠΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ°ΠΌ, Π³Π΄Π΅ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΠ΅ Π²ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, Π³Π΄Π΅ ΠΆΠ΅ ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅; Π·Π°ΡΠ°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ² ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ.
Π§ΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±Π΅Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π’Π°ΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ , ΠΈ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ½ΠΈΠΆΠ°ΡΡΠ΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠΠ΄Π½ΠΎ ΠΈΠ· ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ β ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π² ΡΠ΅Π»ΡΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ.
Π’ΠΎΠ³Π΄Π° ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, Π²ΡΠ·Π²Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ dynamic_cast (ΡΠΌ. ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ 8), ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ dynamic_cast ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΠΈ static_cast Π² ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ (ΡΠΌ. [Stroustrup00]):
template<class To, class From> To checked_cast(From* from) {
assert(dynamic_cast<To>(from) ==
static_cast<To>(from) && "checked_cast failed" );
return static_cast<To>(from);
}
template<class To, class From> To checked_cast(From& from) {
typedef tr1::remove_reference<To>::type* ToPtr; // [C++TR104]
assert(dynamic_cast<ToPtr>(&from) ==
static_cast<ToPtr>(&from) && "checked_cast failed");
return static_cast<To>(from);
}
ΠΡΠ° ΠΏΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π΄Π»Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΡΡΡΠ»ΠΎΠΊ) ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈΠ±ΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±ΠΈΡΡ checked_cast Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ Π½ΡΠΆΠ΄, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅ΡΡΠΈΠΉΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅.
Π‘ΡΡΠ»ΠΊΠΈ[Dewhurst03] Β§29, Β§35, Β§41 β’ [Meyers97] Β§39 β’ [Stroustrup00] Β§13.6.2 β’ [Sutter00] Β§44
94. ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΎΡΠΌΠ΅Π½ΡΡΡΠΈΡ const
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ², ΠΎΡΠΌΠ΅Π½ΡΡΡΠ΅Π΅ const, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, Π° ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°ΠΆΠ΅ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΏΠΎΠ»Π½Π΅ Π·Π°ΠΊΠΎΠ½Π½ΠΎ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ const β ΡΡΠΎ Π΄ΠΎΡΠΎΠ³Π° Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΡΡΠΈΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ, Π²Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π°Π²Π°ΡΡ Π·Π°Π΄Π½ΠΈΠΉ Ρ ΠΎΠ΄. ΠΡΠ»ΠΈ Π²Ρ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΡΠ΅ const Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ» ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ, Π·Π°Π΄Π½ΠΈΠΉ Ρ ΠΎΠ΄ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π²Π°Ρ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΡΠΈΡ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ (ΠΈ, Π±ΡΠ²Π°Π΅Ρ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ) ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ (ROM) ΠΈΠ»ΠΈ Π² ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠΊΠ°Π· ΠΎΡ const Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° β ΠΏΡΠ΅ΡΡΡΠΏΠ½ΡΠΉ ΠΎΠ±ΠΌΠ°Π½, Π·Π°ΡΠ°ΡΡΡΡ ΠΊΠ°ΡΠ°Π΅ΠΌΡΠΉ Π°Π²Π°ΡΠΈΠΉΠ½ΡΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ·-Π·Π° Π½Π°ΡΡΡΠ΅Π½ΠΈΡ Π·Π°ΡΠΈΡΡ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΏΠΎΡΠ΅ΡΠΏΠΈΡ ΠΊΡΠ°Ρ , ΠΎΡΠΌΠ΅Π½Π° const ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΠΌΠ΅Π½Ρ ΠΎΠ±Π΅ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΈ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎΠ³ΠΎ, ΡΠ΅Π³ΠΎ ΠΎΡ Π½Π΅Π΅ Π·Π°ΡΠ°ΡΡΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ:
void Foolish(unsigned int n) {
const unsigned int size = 1;
const_cast<unsigned int&>(size) = n; // ΠΠ΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ°ΠΊ!
char buffer[size]; // Π Π°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°
// ... // Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΠ°Π²Π΅Π½ 1
}
Π Π‘++ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ const_cast ΠΈΠ· ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΡΠ΅ΡΠ°Π»Π° Π² char*:
char* weird = "Trick or treat?";
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠ»ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ const_cast ΠΈΠ· const char[16] Π² char*. ΠΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ API Π² ΡΡΠΈΠ»Π΅ Π‘, Ρ ΠΎΡΡ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΄ΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΈΠΏΠΎΠ² Π‘++. Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ ΠΌΠΎΠ³ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΠΈ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠΈΡΡ ΠΏΠ°ΠΌΡΡΠΈ.