Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rozdział2NowoczesnyC++
doublebigNumber{1.0};
floatlittleNumber{bigNumber};
return0;
}
KompilatorClang,podobniejakkompilatorVS,zgłosząbłędyprzykompilowaniukodu
ztegoprzykładu,gdyżwkodzieźródłowymwystępujądwiekonwersjezawężające.
Pierwszanastępujewchwili,gdypróbujemyzdefiniowaćzmiennątypu
char
owartości
literału512.Maksymalnawartość,jakąmożeprzechowaćtyp
char
,to255;tymsamym
wartość512zostałabyobciętadomaksymalnejwartościtegotypudanych.Kompilator
zgodnyzC++11lubwersjąnowsząnieskompilujetegokoduzpowodutegobłędu.
Inicjowaniezmiennejtypu
float
wartościątypu
double
równieżjestkonwersjązawęża-
jącą.Konwersjezawężającewystępująwtedy,gdydaneprzekazywanezjednegotypu
doinnegoitypdocelowyniemożepomieścićwszystkichwartościreprezentowanych
przeztypźródłowy.Wprzypadkukonwersjitypu
double
na
float
następujeutratado-
kładności;ztegowzględukompilator(poprawnie)nieskompilujetegokodu,takjak
jestonaktualnienapisany.Kodpokazanywlistingu2-4używa
static_cast
wcelupo-
informowaniakompilatora,żekonwersjazawężającaniejestbłędemlubniedopatrze-
niem,alejestzamierzona-tymrazemkodsięskompilujebezbłędów.
Listing2-4.Wykorzystaniestatic_castwceluskompilowaniakonwersjizawężających
intmain()
{
intnumber{0};
charanother{static_cast<char>(512)};
doublebigNumber{1.0};
floatlittleNumber{static_cast<float>(bigNumber)};
return0;
}
29