19.2 Konwersje jawne
Dalej: 20. Dziedziczenie i polimorfizm
W górę: 19. Jeszcze o konwersjach
Wstecz: 19.1 Konwersje od i do
Podrozdziały
19.2.1 Konwersje uzmienniające
19.2.2 Konwersje statyczne
19.2.3 Konwersje dynamiczne
19.2.4 Konwersje wymuszane
19.2 Konwersje jawne
W czystym C, tak jak w Javie,
możemy zażądać jawnie konwersji
od wartości jednego typu do wartości innego typu za pomocą
rzutowania.
Ma ono postać
(Typ) wyrazenie
gdzie
Typ jest nazwą typu, a
wyrazenie jest wyrażeniem
o p-wartości innego typu. Wynikiem jest p-wartość typu
Typ,
reprezentująca wartość wyrażenia
wyrazenie.
W Javie tego typu rzutowania są bezpieczne: albo na etapie
kompilacji, albo, jeśli to niemożliwe, na etapie wykonania
zostanie sprawdzone, czy takie rzutowanie ma sens. W C taka forma
rzutowania jest mniej bezpieczna; będzie ono wykonane „siłowo'',
czasem zupełnie bezsensownie. Dlatego lepiej jest używać nowych
operatorów, wprowadzonych w C++, które wykonują te konwersje
w sposób bardziej kontrolowany. Wszystkie one mają postać
rodzaj_cast<Typ>(wyrazenie)
gdzie zamiast '
rodzaj' należy wstawić
static,
dynamic,
const lub
reinterpret. Wynikiem
będzie p-wartość typu
Typ utworzona na podstawie wartości
wyrażenia
wyrazenie.
19.2.1 Konwersje uzmienniające
Konwersja uzmienniająca
ma postać
const_cast<Typ>(wyrazenie)
Wyrażenie
wyrazenie musi tu być tego samego typu
co
Typ, tylko z modyfikatorem
const lub
volatile.
A zatem tego rodzaju konwersja usuwa „ustaloność'' (lub
„ulotność'') i może służyć tylko do tego celu. Z drugiej
strony, tego samego efektu nie można uzyskać za pomocą
konwersji przy użyciu
static_cast,
dynamic_cast lub
reinterpret_cast: kompilator uznałby taką konwersję
const Typ
Typ za nielegalną.
Rozpatrzmy przykład:
Wyszukiwarka
Podobne podstrony:
node12node127node126node121node126node129node126 EAT2FBA72AHUMICANGCYU4DWVTTCBUBOOFOV5DInode128node124node127node128node126node124node12 5RJIDD32YMXJNTH7EYXB4KIBTOGGXXKPFHRU6VAnode120node128więcej podobnych podstron