The answers to the following question describe the recommended usage of static_cast
, dynamic_cast
, and reinterpret_cast
in C++:
When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
Do you know of any tools that can be used to detect misuse of these kinds of cast? Would a static analysis tool like PC-Lint or Coverity Static Analysis do this?
The particular case that prompted this question was the inappropriate use of static_cast
to downcast a pointer, which the compiler does not warn about. I'd like to detect this case using a tool, and not assume that developers will never make this mistake.
Given that there is no reliable way of telling what type the pointer points to at compile time, this is a pretty hard problem to catch at compile time.
The simplest method is to do the catch at run-time, using a macro "safe_cast" which compiles to a dynamic_cast with an assert in debug, and a static_cast in release.
Now, during debugging, if the cast is inappropriate, the dynamic cast will return NULL, and assert. There is also no overhead during release.