<p>What are the proper uses of:</p>
<ul>
<li><a href="https://en.cppreference.com/w/cpp/language/static_cast" rel="noreferrer"><code>static_cast</code></a></li>
<li><a href="https://en.cppreference.com/w/cpp/language/dynamic_cast" rel="noreferrer"><code>dynamic_cast</code></a></li>
<li><a href="https://en.cppreference.com/w/cpp/language/const_cast" rel="noreferrer"><code>const_cast</code></a></li>
<li><a href="https://en.cppreference.com/w/cpp/language/reinterpret_cast" rel="noreferrer"><code>reinterpret_cast</code></a></li>
<li><a href="https://en.cppreference.com/w/cpp/language/explicit_cast" rel="noreferrer"><code>(type)value</code></a> (C-style cast)</li>
<li><a href="https://en.cppreference.com/w/cpp/language/explicit_cast" rel="noreferrer"><code>type(value)</code></a> (function-style cast)</li>
</ul>
<p>How does one decide which to use in which specific cases?</p>

Does
this
answer your question?
I have never used
```
reinterpret_cast
```
, and wonder whether running into a case that needs it isn't a smell of bad design. In the code base I work on
```
dynamic_cast
```
is used a lot. The difference with
```
static_cast
```
is that a
```
dynamic_cast
```
does runtime checking which may (safer) or may not (more overhead) be what you want (see
msdn
).