简体   繁体   中英

Is a C-style cast identical to a function-style cast?

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 or type(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:

Resharper截图

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); .

I don't have a quote from the standard, but cppreference is usually good enough.

Explicit type conversion

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) or int*(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, eg (double*)some_int_ptr .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM