Konwersje rzutowania typów
Rzutowania typu umożliwiają jawne konwertowanie typów.
Składnia
cast-expression
:
unary-expression
(
type-name
)
cast-expression
type-name
:
specifier-qualifier-list
abstract-declarator
Zdecydować
Jest type-name
typem i cast-expression
jest wartością, która ma zostać przekonwertowana na ten typ. Wyrażenie z rzutem typu nie jest wartością l. Element cast-expression
jest konwertowany tak, jakby został przypisany do zmiennej typu type-name
. Reguły konwersji przypisań (opisane w temacie Konwersje przydziałów) mają zastosowanie również do rzutowania typów. W poniższej tabeli przedstawiono typy, które można rzutować do dowolnego typu.
Rzuty typu prawnego
Typy docelowe | Potencjalne źródła |
---|---|
Typy całkowite | Dowolny typ liczb całkowitych lub typ zmiennoprzecinkowa lub wskaźnik do obiektu |
Zmiennoprzecinkowy | Dowolny typ arytmetyczny |
Wskaźnik do obiektu lub void * |
Dowolny typ liczby całkowitej, void * , wskaźnik do obiektu lub wskaźnik funkcji |
Wskaźnik funkcji | Dowolny typ całkowity, wskaźnik do obiektu lub wskaźnik funkcji |
Struktura, unia lub tablica | Brak |
Typ pustki | Dowolny typ |
Dowolny identyfikator można rzutować do void
typu. Jeśli jednak typ określony w wyrażeniu rzutowania typu nie void
jest , identyfikator rzutowania na ten typ nie może być wyrażeniem void
. Dowolne wyrażenie można rzutować na void
, ale nie można rzutować wyrażenia typu void
na inny typ. Na przykład funkcja z void
typem zwrotnym nie może mieć rzutowania powrotnego do innego typu.
Wyrażenie void *
ma wskaźnik typu na void
, a nie typ void
. Jeśli obiekt jest rzutowy do void
typu, wynikowe wyrażenie nie może być przypisane do żadnego elementu. Podobnie obiekt rzutowania typu nie jest akceptowalną wartością l, więc nie można przypisania do obiektu rzutowania typu.
Specyficzne dla firmy Microsoft
Rzutowanie typu może być wyrażeniem l-wartości, o ile rozmiar identyfikatora nie zmienia się. Aby uzyskać informacje na temat wyrażeń l-value, zobacz Wyrażenia L-Value i R-Value.
END Microsoft Specific
Wyrażenie można przekonwertować na typ void
za pomocą rzutowania, ale wyrażenie wynikowe może być używane tylko wtedy, gdy wartość nie jest wymagana. Wskaźnik obiektu przekonwertowany na void *
i z powrotem do oryginalnego typu powróci do oryginalnej wartości.