Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
lub
default:wyrażenie
Asocjacja
default
jestopcjonalnaimożesiępojawićnaliścietylkoraz.Nazwytypów
musząprzedstawiaćodrębne,wzajemnieniekompatybilnetypy.Typyniekompletneitypy
tablicozmiennejdługościsąniedozwolone.
Wyrażeniemkontrolnymwyrażenieniejestprzetwarzanie,leczjegotypjestporów-
nywanyznazwamitypównaliścieasocjacji.Jeślitypwyrażeniakontrolnegojestzgodny
zjednąznazwtypów,wówczaskompilatorwybierawyrażeniepowiązaneztymtypem
naliście.Jeślinaliścieniemanazwyzgodnegoztypu,wówczaswybieranejestwyrażenie
zasocjacji
default
.Jeślilistaniezawieratypuzgodnego,aniasocjacjidomyślnej,wówczas
kompilatorwygenerujekomunikatbłędu.
Typiwartośćselekcjigenerycznejsązgodnezwyrażeniemwynikowym,apodczas
wykonywaniaprogramuprzetwarzanejesttylkowyrażeniewynikowe.Poniżejznajduje
sięprostyprzykład:
-Generic(1.0,int:"int",double:"double",
default:"aniint,anidouble")
Wynikiemtejselekcjijestliterałtekstowy"double",ponieważ1.0jesttypudouble.
Selekcjegenerycznesąużywaneprzedewszystkimdodefiniowaniamakrgenerycznych,
jakwponiższymprzykładzie:
#definetypeOf(x)-Generic((x),int:"int",double:"double",\
default:"aniint,anidouble")
Potejdefinicji,wywołaniemakra
typeOf('A')
zwróci
"int"
,ponieważstałaznakowa
wjęzykuCjesttypuint.JednakżewywołanietypeOf(var)zwrócinapis"aniint,ani
double",jeślizmiennavarjesttypuunsignedintlubconstdouble,ponieważtetypy
niesązgodnezżadnymtypemnaliścieselekcjigenerycznej,zawierającejnazwyty-
pów
int
i
double
.Inny,bardziejprzydatnyprzykładmakragenerycznego,napisanego
zwykorzystaniemselekcjigenerycznej,jestprzedstawionywrozdziale15.nDyrektywy
preprocesora”
.
L-wartości
L-wartośćjestwyrażeniemodnoszącymsiędoobiektu.Najprostszymprzykłademjest
nazwazmiennej.PierwszaliteranL”początkowooznaczałanlef”(ang.zlewej).Ponieważ
L-wartośćodnosisiędoobiektu,możesięznajdowaćzlewejstronyoperatoraprzypisania,
jakw
wyrażeniezlewej:wyrażeniezprawej
3.Innewyrażenia-tektórereprezentują
Wyrażeniaioperatory
3StandardCuznajetęetymologię,leczproponuje,abyliteraLwL-wartościdotyczyłanlokalizatora”
,
ponieważL-wartośćzawszeodnosisiędolokalizacjiwpamięci.Standardunikaużywaniaterminu
R-wartość,preferującokreślenienwartośćniebędącaL-wartością”
.
Jaksąprzetwarzanewyrażenia
|
73