Reputation: 59228
From this answer to the question "When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?":
C-style cast and function-style cast are casts using
(type)object
ortype(object)
, respectively.
It then begins to list the behavior of the C-style cast, but never tells whether the function-style cast is identical or not.
I'm asking because Resharper for C++ warns me in case of C-style casts but does not warn me in case of function-style casts:
In what way is the the function-style case different from the C-style cast? Or, if they are identical, is it a bug in Resharper and it should emit a warning, too? Is int(d)
safe to use? It looks much simpler than the suggested static_cast<int>(d);
.
Upvotes: 3
Views: 1831
Reputation: 7324
I don't have a quote from the standard, but cppreference is usually good enough.
The functional cast expression consists of a simple type specifier or a typedef specifier (in other words, a single-word type name:
unsigned int(expression)
orint*(expression)
are not valid), followed by a single expression in parentheses. This cast expression is exactly equivalent to the corresponding C-style cast expression.
As for Resharper, it's possible that to it C++ cast includes a functional cast, as that is only valid in C++.
The answer you linked in your question explains how safe a functional cast is. In your case int(d)
should be equivalent to static_cast<int>(d)
. But in general a C-style or functional cast are unsafe as they can be equivalent to reinterpret_cast
in certain situations, e.g. (double*)some_int_ptr
.
Upvotes: 5