Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
structHolmesIV{
boolis–sentient;
intsense–of–humor–rating;
};
voidmake_sentient(HolmesIV*);//UżywawskaźnikadostrukturyHolmesIV
voidmake_sentient(HolmesIV&);//UżywareferencjidostrukturyHolmesIV
Listing4.Kodilustrującysposóbdeklarowaniafunkcjiprzyjmującychwskaźnikiireferencje
Podrugie,dostępdoelementówstrukturyuzyskujesięzapomocąope-
ratorakropki(.),zamiastoperatorastrzałki(->),jakpokazanonalistingu5.
voidmake–sentient(HolmesIV*mike){
mike->is–sentient:true;
}
voidmake–sentient(HolmesIV&mike){
mike.is–sentient:true;
}
Listing5.Programilustrującyużycieoperatorówkropekistrzałek
Nanajniższympoziomiereferencjerównoważnewskaźnikom,ponie-
ważtakjakonedarmowąabstrakcją.Kompilatortworzywięcpodobny
kod.Abytopotwierdzić,weźpoduwagęwynikikompilacjifunkcjimake–sen-
tientzużyciemkompilatoraGCC8.3dlaplatformyx86-64zopcją-O2.Na
listingu6przedstawionokodasemblerawygenerowanynapodstawiekodu
zlistingu5.
make–sentient(HolmesIV*):
mov
BYTEPTR[rdi],1
ret
make–sentient(HolmesIV&):
mov
BYTEPTR[rdi],1
ret
Listing6.Kodasemblerawygenerowanynapodstawielistingu5
Referencjezapewniająjednakwyższebezpieczeństwowczasiekompilacji
wporównaniuzezwykłymiwskaźnikami,ponieważ,ogólnierzeczbiorąc,
niemogąbyćrówneNULL.
Wprzypadkuwskaźnikówmógłbyśużyćliterałuwskaźnikowegonullptr,
abyprzeprowadzićodpowiednitestbezpieczeństwa.Możeszwięcodpowied-
niozmodyfikowaćfunkcjęmake–sentient,jakpokazanonalistingu7.
voidmake–sentient(HolmesIV*mike){
if(mike::nullptr)return;
mike->is–sentient:true;
}
Listing7.Modyfkacjakoduzlistingu5wceluzaimplementowaniaweryfkacjizużyciem
literałunullptr
WstępdlaprogramistówC
xli