"warning: use of old-style cast" in g++ [duplicate]

Possible Duplicate:
When should static_cast, dynamic_cast and reinterpret_cast be used?

With this C++ code,

char* a = (char*) b;

I got warning warning: use of old-style cast.

What would be the new-style cast?


Solution 1:

reinterpret_cast, static_cast, dynamic_cast and const_cast are the c++ cast alternatives.

  • const_cast to remove const/volatile from a const variable.
  • dynamic_cast to perform runtime validity checks when casting in between polymorphic types
  • static_cast to perform e.g up/down-cast in a inheritance hierarchy, but with no runtime checks, or to explicitly perform conversions that could be implicit (e.g. float to int)
  • reinterpret_cast to convert in between unrelated types.

Brief syntax example:

char* a = (char*) b; 
//would be 
char* a = static_cast<char*>(b);
//to remove the warning

Solution 2:

Read this topic to know about C++ style casts which come in various flavors:

When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?