cast




static_cast

// int から long へ
int ival;
long lval = static_cast<long>(ival);


reinterpret_cast


// long から int* へ
long lval;
int* iptr = reinterpret_cast<int*>(lval);


const_cast


// const int* から int* へ
const int* ciptr;
int* iptr = const_cast<int*>(ciptr);


dynamic_cast


class Base { ... };
class Derived : public Base { ... };

Base base;
Derived derived;

Derived* pd1 = dynamic_cast<Derived*>(&base); // 失敗 pd1 == 0
Derived* pd2 = dynamic_cast<Derived*>(&derived);

  
参照のキャストに失敗すると、std::bad_cast例外がthrowされます。 
try {
  Derived& rd1 = dynamic_cast<Derived&>(base);
} catch ( const std::bad_cast& e ) {
  std::cout << e.what() << std::endl;
};