Převody přetypování
Přetypování typů můžete použít k explicitní převodu typů.
Syntaxe
cast-expression
:
unary-expression
(
type-name
)
cast-expression
type-name
:
specifier-qualifier-list
abstract-declarator
volit
Jedná se type-name
o typ a cast-expression
jedná se o hodnotu, která se má převést na tento typ. Výraz s přetypování typu není l-hodnota. Převede cast-expression
se, jako by byla přiřazena proměnné typu type-name
. Pravidla převodu pro přiřazení (uvedená v převodech přiřazení) platí i pro přetypování typů. Následující tabulka uvádí typy, které lze přetypovat na libovolný daný typ.
Přetypování právního typu
Cílové typy | Potenciální zdroje |
---|---|
Celočíselné typy | Jakýkoli typ celého čísla nebo typ s plovoucí desetinou čárkou nebo ukazatel na objekt |
Plovoucí desetiná čárka | Libovolný aritmetický typ |
Ukazatel na objekt nebo void * |
Libovolný typ celého čísla, void * ukazatel na objekt nebo ukazatel funkce |
Ukazatel funkce | Jakýkoli celočíselný typ, ukazatel na objekt nebo ukazatel funkce |
Struktura, sjednocení nebo pole | Nic |
Typ Void | Libovolný typ |
Libovolný identifikátor lze přetypovat na void
typ. Pokud však typ zadaný ve výrazu přetypování typu není void
, pak identifikátor přetypovaný na tento typ nemůže být void
výraz. Libovolný výraz lze přetypovat na void
, ale výraz typu void
nelze přetypovat na žádný jiný typ. Například funkce s void
návratovým typem nemůže mít návratové přetypování na jiný typ.
Výraz void *
má ukazatel void
typu , nikoli typ void
. Pokud je objekt přetypován na void
typ, výsledný výraz nemůže být přiřazen k žádné položce. Podobně objekt přetypování typu není přijatelnou l-hodnotou, takže nelze provést žádné přiřazení k objektu přetypování typu.
Specifické pro Microsoft
Přetypování typu může být výraz l-hodnota, pokud se velikost identifikátoru nezmění. Informace o výrazech l-value naleznete v tématu Výrazy L-Value a R-Value.
END Microsoft Specific
Výraz můžete převést na typ void
pomocí přetypování, ale výsledný výraz se dá použít jenom v případě, že hodnota není povinná. Ukazatel objektu převedený na void *
původní typ a zpět na původní typ se vrátí do původní hodnoty.