Другие средства стандартной библиотеки
Êðîìå ðaññìîòðåííûõ, ñòaíäaðòíaя áèáëèîòåêa C++ ñîäåðæèò ñðåäñòâa ïîä- äåðæêè яçûêa, äèaãíîñòèêè, ëîêaëèçaöèè, ðaáîòû ñ êîìïëåêñíûìè ÷èñëaìè, áî- ëåå 200 ôóíêöèé, óíañëåäîâaííûõ èç ñòaíäaðòíîé áèáëèîòåêè C, a òaêæå òèïîâ äëя èõ ïîääåðæêè è ìaêðîñîâ.
Cðåäñòâa ïîääåðxnè яçûna âêëþ÷aþò îïèñaíèя ôóíêöèé è òèïîâ, êîòîðûå äîëæ- íû ïðèñóòñòâîâaòü ïðè âûïîëíåíèè ïðîãðaììû. Îíè âêëþ÷aþò â ñåáя ïîääåðæ- êó çaïóñêa è çaâåðøåíèя ïðîãðaììû, îïåðaöèé new è delete, îïèñaíèå ñâîéñòâ âñòðîåííûõ òèïîâ äaííûõ, äèíaìè÷åñêóþ èäåíòèôèêaöèþ òèïîâ, îáðaáîòêó èñ- êëþ÷åíèé è äðóãèå ñðåäñòâa âðåìåíè âûïîëíåíèя. Ýòè ñðåäñòâa ïðåäñòaâëåíû â çaãîëîâî÷íûõ ôaéëaõ , , , , , ,
, , , , , .
 áèáëèîòåêå (ôaéë ) îïðåäåëåí øaáëîí êëañña numeriC_limits, â êîòîðîì îïðåäåëяþòñя ñâîéñòâa òèïa äaííûõ, çaâèñяùèå îò ðåaëèçaöèè: äèaïaçîí, òî÷- íîñòü, íaëè÷èå çíaêa è ò. ä. Äëя êaæäîãî èç îñíîâíûõ òèïîâ äaííûõ îïðåäåëåía ñïåöèaëèçaöèя øaáëîía numeriC_limits. Ýòè æå õaðaêòåðèñòèêè îïðåäåëяþòñя è â êîíñòaíòaõ, îïèñaííûõ â çaãîëîâî÷íûõ ôaéëaõ è , óíañëåäîâaí- íûõ èç áèáëèîòåêè C, íaïðèìåð:
FLT_DIG — êîëè÷åñòâî âåðíûõ çía÷aùèõ öèôð â âåëè÷èíå òèïa flOat;
FLT_MIN — ìèíèìaëüíîå íîðìaëèçîâaííîå ÷èñëî ñ ïëaâaþùåé òî÷êîé, êîòîðîå ìîæåò áûòü ïðåäñòaâëåíî òèïîì flOat;
UINT_MAX — ìaêñèìaëüíîå çía÷åíèå, êîòîðîå ìîæåò ïðèíèìaòü âåëè÷èía òèïa
unsigned int (äîëæíî áûòü íå ìåíåå 65 535). Ïîëíîñòüþ ýòè êîíñòaíòû îïèñaíû â ïðèëîæåíèè 5.
Äëя îáðaáîònè îøèáîn ïðè âûäåëåíèè ïaìяòè â áèáëèîòåêå îïèñaí êëaññ bad_allOC, òèï ôóíêöèé-îáðaáîò÷èêîâ îøèáîê new_handler è ôóíêöèя óñòaíîâêè íîâîãî îáðaáîò÷èêa set_new_handler.
Глава 16. Другие средства стандартной библиотеки 379
Ìåõaíèçì îáðaáîòêè îøèáîê âûäåëåíèя ïaìяòè ñëåäóþùèé: åñëè îïåðaöèя new íå ìîæåò âûäåëèòü òðåáóåìîå êîëè÷åñòâî äèíaìè÷åñêîé ïaìяòè, îía âûçûâaåò ôóíêöèþ-îáðaáîò÷èê òèïa new_handler, êîòîðûé äîëæåí ëèáî ïîïûòaòüñя îñâîáî- äèòü ïaìяòü, ëèáî ïîðîäèòü èñêëþ÷åíèå â âèäå îáúåêòa êëañña bad_allOC èëè ïðî- èçâîäíîãî îò íåãî, ëèáî âûçâaòü ôóíêöèþ abOrt èëè exit äëя çaâåðøåíèя ïðî- ãðaììû. Ôóíêöèя set_new_handler èñïîëüçóåòñя äëя óñòaíîâêè ñîáñòâåííîãî îáðaáîò÷èêa âìåñòî ñòaíäaðòíîãî. Êaê ïðaâèëî, îía ïðèìåíяåòñя ïðè ïåðåãðóçêå îïåðaöèé new è delete.
Äëя ïîääåðxnè äèíaìè÷åñnîñ èäåíòèôènaöèè òèïîâ â áèáëèîòåêå îïðåäåëåí êëaññ type_infO, ðaññìîòðåííûé â ðaçäåëå «Ïðåîáðaçîâaíèя òèïîâ» ía ñ. 231, a òaêæå êëaññû èñêëþ÷åíèé bad_Cast è bad_typeid.
Âñå ñòaíäaðòíûå èñnëþ÷åíèя яâëяþòñя ïîòîìêaìè îïèñaííîãî â çaãîëîâî÷íîì ôaéëå êëañña exCeptiOn.
Cðåäñòâa äèaãíîñòènè âêëþ÷aþò â ñåáя ñòaíäaðòíûå êëaññû è ôóíêöèè, êîòîðûå èñïîëüçóþòñя äëя äèaãíîñòèêè îøèáîê, âîçíèêaþùèõ â ïðîöåññå ðaáîòû ïðî- ãðaììû. Âñå îøèáêè ïîäðaçäåëяþòñя ía ëîãè÷åñnèå (lOgiC_errOr), êîòîðûå â ïðèíöèïå ìîæíî îáíaðóæèòü äî çaïóñêa ïðîãðaììû, è îøèánè âðåìåíè âûïîëíå- íèя (runtime_errOr).  áèáëèîòåêå îïðåäåëåía ïðîñòaя èåðaðõèя êëaññîâ èñêëþ-
÷åíèé, êîòîðaя äîëæía ñëóæèòü îñíîâîé äëя èñêëþ÷åíèé, ñîçäaâaåìûõ ïðîãðaì- ìèñòîì:
exception
bad_alloc bad_cast bad_typeid bad_exception logic_error
length_error domain_error out_of_range invalid_argument
runtime_error
range_error overflow_error underflow_error
Do'stlaringiz bilan baham: |