Possible duplicate:
When should static_cast, dynamic_cast, and reinterpret_cast be used?
I searched the search engine many times:
- why use C ++ casting operators over traditional C-style casting operators?
- When to use C ++ casting operators, some live examples?
Below I found the following:
- Traditionally, any C ++ casting operators are used to better serve your code (that is), we can easily find where casting is used in the code by simply searching for this complex notation (reinterpret_cast <), unlike C-style cast operators.
Now let me briefly outline why and when for each of the C ++ casting operators
static_cast
Why use it in C style? static_cast used to convert between related types.
Examples:
Class A {}; Class B {}; A* a = new A(); B* b = static_cast<B*>(a);
But I wanted to know a real example of using the code above?
reinterpret_cast:
reinterpret_cast distinguishes pointers to unrelated types.
Examples:
Class A {}; Class B {}; A* a = new A(); B* b = reinterpret_cast<B*>(a); // Works fine B* b1 = (A*)a; // Works fine float f; int addr = (int)(&f); // Works fine int addr = reinterpret_cast<int>(&f); // Works fine int ai = 10; float af = 13.33; // Would depend on how floating point is stored in machine // int& since reinterpret_cast expects either the type or operand to be pointer or reference int ki = reinterpret_cast<int&>(af); // ki would not be 13 int kitemp = (int)af; // kitemp would be 13 // The same reinterpret_cast behaviour can be achieved using this, int* in = (int*)(af); cout << (*in);
My question is, how is reinterpret_cast different from C style customization? I cannot find why to use it over traditional casting operators, and also when to use it?
Another important example that makes these statements worse:
const unsigned int * p; (int*)p;
Writing the above code to remove const and unsigned much more complicated in C ++ listing? Then why do people use reinterpret_cast , const_cast or static_cast compared to traditional C casting operators?
I really understand the dynamic_cast used in the case of polymorphic classes; again, this operator also has the added cost of RTTI.