Type casting in C++ allows converting a variable or expression of one type into another type. There are two types of casting: implicit and explicit. Implicit casting occurs automatically during assignments while explicit casting requires a cast operator. C++ supports C-style casting using parentheses as well as new C++-style casting operators like const_cast, static_cast, dynamic_cast, and reinterpret_cast. Static_cast performs type conversions at compile time while dynamic_cast converts at runtime. Reinterpret_cast changes one data type into another, including between incompatible pointer types.