Я склонен избегать этого, но бывают случаи, когда это очень полезно:
- для производительности, работающей с необработанными буферами (графикой и т. Д.)
- , необходимыми для некоторых неуправляемыхAPI (также довольно редкий для меня)
- для мошенничества с данными
Например, я поддерживаю некоторый код сериализации.Запись float
в поток без необходимости использования BitConverter.GetBytes
(который каждый раз создает массив) является болезненной, но я могу обмануть:
float f = ...;
int i = *(int*)&f;
Теперь я могу использовать shift (>>
)и т.д. писать i
гораздо проще, чем было бы писать f
(байты будут такими же, как если бы я позвонил BitConverter.GetBytes
, плюс теперь я управляю порядком байтов по тому, как я решу использовать shift).