Type-Cast Conversions
You can use type casts to explicitly convert types.
Syntax
cast-expression
:
unary-expression
(
type-name
)
cast-expression
type-name
:
specifier-qualifier-list
abstract-declarator
opt
The type-name
is a type and cast-expression
is a value to be converted to that type. An expression with a type cast isn't an l-value. The cast-expression
is converted as though it had been assigned to a variable of type type-name
. The conversion rules for assignments (outlined in Assignment Conversions) apply to type casts as well. The following table shows the types that can be cast to any given type.
Legal type casts
Destination Types | Potential Sources |
---|---|
Integral types | Any integer type or floating-point type, or pointer to an object |
Floating-point | Any arithmetic type |
A pointer to an object, or void * |
Any integer type, void * , a pointer to an object, or a function pointer |
Function pointer | Any integral type, a pointer to an object, or a function pointer |
A structure, union, or array | None |
Void type | Any type |
Any identifier can be cast to void
type. However, if the type specified in a type-cast expression isn't void
, then the identifier being cast to that type can't be a void
expression. Any expression can be cast to void
, but an expression of type void
can't be cast to any other type. For example, a function with void
return type can't have its return cast to another type.
A void *
expression has a type pointer to void
, not type void
. If an object is cast to void
type, the resulting expression can't be assigned to any item. Similarly, a type-cast object isn't an acceptable l-value, so no assignment can be made to a type-cast object.
Microsoft Specific
A type cast can be an l-value expression as long as the size of the identifier doesn't change. For information on l-value expressions, see L-Value and R-Value Expressions.
END Microsoft Specific
You can convert an expression to type void
with a cast, but the resulting expression can be used only where a value isn't required. An object pointer converted to void *
and back to the original type will return to its original value.