castig: No se que es, me suena a un usuario del foro. Tal vez hayas querido decir casting.
static_cast: Generalmente se utiliza cuando se conoce de antemano los tipos de datos involucrados en la conversión; porciones de código criticas donde el rendimiento importa sobremanera. Este tipo de casteo no chequea en tiempo de ejecución por lo tanto no tiene tanta sobrecarga de rendimiento pero a la vez son inseguros si se utilizan de mala forma, puesto que los chequeos debe hacerlos el programador.
dynamic_cast: Explicar dynamic_cast es un tanto mas complicado, ya que involucra muchos otros conceptos de C++. Para resumirlo se podría decir que se utiliza con punteros y/o referencias y que en este caso si se hace un chequeo en tiempo de ejecución, por lo tanto son mas seguros pero a la vez tienen cierta sobrecarga en el rendimiento (aunque hay excepciones).
const-ness: A grandes rasgos son medidas que ayudan a los programadores a evitar posibles escrituras indeseadas. Es decir, si una variable A es const, al intentar modificar su contenido se recibe un error en tiempo de compilación. De esta forma se puede ahorrar mucho tiempo y se evitan muchos fallos.
Resumiendo, se trata de utilizar el especificador const para evitar que objetos constantes sean modificados, por ejemplo:
Obj const* Ptr //Ptr apunta a un Obj const
Obj no puede modificarse mediante Ptr.
Obj* const Ptr // Ptr es un puntero const que apunta hacia Obj
No podes modificiar el puntero Ptr, pero podes modificar Obj mediante Ptr.
Son solo ejemplos, ya sea el concepto de casting o el concepto de const-ness, ambos abarcan mucho mas que lo que te he mencionado, así que si quieres involucrarte mas lo ideal es que leas algún libro sobre el tema.
Saludos!