R.15.2 ΠΠ°ΠΏΡΡΠΊ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ. ΠΠ°ΠΏΡΡΠΊ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΡΡ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ. Π’Π°ΠΊ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
throw "Help!";
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ Ρ ΡΠΈΠΏΠΎΠΌ char*:
try {
//β¦
}
catch(const char* p) {
// Π·Π΄Π΅ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠΎΠ±Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΡΡΡΠΎΠΊΠ°Ρ
}
Π° ΠΎΡΠΎΠ±Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Overflow (ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅):
class Overflow {
//β¦
public:
Overflow(char,double,double);
};
void f(double x)
{
//β¦
throw Overflow('+',x,3.45e107);
}
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ
try {
//β¦
f(1.2);
//β¦
}
catch(Overflow& oo) {
// Π·Π΄Π΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠ° Overflow
}
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ°. "ΠΠ»ΠΈΠΆΠ°ΠΉΡΠΈΠΉ" - ΡΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΡΠΉ-Π±Π»ΠΎΠΊ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ½ΠΎ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ ΠΎΡΡΡΠ΄Π°. Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ "ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ" ΡΠΈΠΏ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² Β§R.15.4.
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ-Π·Π°ΠΏΡΡΠΊΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»ΡΠΆΠΈΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ throw, ΠΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅. ΠΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² (ΡΠΌ. Β§R.15.4) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ throw Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ (Β§R.5.2.2) ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ return.
ΠΡΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ, Π½Π΅ ΠΌΠ΅Π½ΡΡ ΡΠΌΡΡΠ»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π° ΡΡΠ΅Ρ ΠΎΡΠΊΠ°Π·Π° ΠΎΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΎΠ² Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Β§R.12.1), ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π±Π΅Π· Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΎ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°.
ΠΡΠ»ΠΈ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ-Π·Π°ΠΏΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π½Π΅ Π·Π°Π΄Π°Π½, ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. Π’Π°ΠΊΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅-Π·Π°ΠΏΡΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΌΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΠΈΠ»ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠΏΠΎΡΡΠ΅Π΄ΠΎΠ²Π°Π½Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ Π½Π΅Π»ΡΠ·Ρ Π΅ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
try {
//β¦
}
catch (β¦) { // ΠΏΠ΅ΡΠ΅Ρ Π²Π°Ρ Π²ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ
// (ΡΠ°ΡΡΠΈΡΠ½Π°Ρ) ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ
throw; // ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ
}
R.15.3 ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ
ΠΠΎΠ³Π΄Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΈΠ· ΡΠΎΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ, ΡΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΡ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π²Ρ ΠΎΠ΄Π° Π² ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΡΠΉ-Π±Π»ΠΎΠΊ.
ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ Π±ΡΠ» ΠΏΠΎΡΡΡΠΎΠ΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ, ΡΠΎ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π² Π½Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΡΠΎΠ±Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ Π±ΡΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΆΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΡΠΎΡΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Π° Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΡ Π² Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠ³ΠΎ-Π±Π»ΠΎΠΊΠ° Π΄ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ-Π·Π°ΠΏΡΡΠΊΠ°, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ "ΡΠ°ΡΠΊΡΡΡΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΠΊΠ°".
R.15.4 ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠΏΠ° T, const T, T& ΠΈΠ»ΠΈ const& ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌ Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ-Π·Π°ΠΏΡΡΠΊΠ°, ΠΈΠΌΠ΅ΡΡΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ ΡΠΈΠΏΠ° E, Π΅ΡΠ»ΠΈ:
[1] T ΠΈ E ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΈΠΏΠΎΠΌ;
[2] T ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ (Β§R.4.6) Π±Π°Π·ΠΎΠ²ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ E Π² ΡΠΎΡΠΊΠ΅ Π·Π°ΠΏΡΡΠΊΠ°;
[3] T ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π° E ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΡΠΈΠΏΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π² ΡΠΎΡΠΊΠ΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² T Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ (Β§R.4.6).
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
class Matherr {/*β¦ */ virtual vf(); };
class Overflow: public Matherr {/*β¦ */};
class Underflow: public Matherr {/*β¦ */};
class Zerodivide: public Matherr {/*β¦ */};
void f()
{
try {
g();
}
catch (Overflow oo) {
//β¦
}
catch (Matherr mm) {
//β¦
}
}
ΠΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Overflow Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠ° Overflow, Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Matherr Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠ° Matherr ΠΈ Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ², ΡΠ²Π»ΡΡΡΠΈΡ ΡΡ ΠΎΠ±ΡΠΈΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΎΡ Matherr, Π²ΠΊΠ»ΡΡΠ°Ρ Underflow ΠΈ Zerodivide.
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π² ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠΌ-Π±Π»ΠΎΠΊΠ΅ ΠΏΠΎΠ΄Π±ΠΈΡΠ°ΡΡΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ. Π‘ΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ»Π»ΠΈΠΏΡΠΈΡ β¦ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ-ΠΎΡΠΎΠ±ΠΎΠΉ-ΡΠΈΡΡΠ°ΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ, ΠΈ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ½ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠΌ Ρ Π»ΡΠ±ΠΎΠΉ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ. ΠΡΠ»ΠΈ Π·Π°Π΄Π°Π½ ΡΠ»Π»ΠΈΠΏΡΠΈΡ, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄ΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π² ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠΌ-Π±Π»ΠΎΠΊΠ΅.
ΠΡΠ»ΠΈ Π² ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠΌ-Π±Π»ΠΎΠΊΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½ΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΏΠΎΠΈΡΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠΌ-Π±Π»ΠΎΠΊΠ΅. ΠΡΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½ΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ terminate() (Β§R.15.7).
ΠΡΠΎΠ±Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅ Π²Ρ ΠΎΠ΄Π° Π² ΡΠ΅Π»ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ "ΡΠ°ΡΠΊΡΡΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°".
R.15.5 Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ
ΠΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ. Π‘ΠΏΠΈΡΠΎΠΊ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΡΠΌΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΠΎΡΠΎΠ±ΠΎΠΉ-ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΠΎΡΠΎΠ±ΠΎΠΉ-ΡΠΈΡΡΠ°ΡΠΈΠΈ:
throw ( ΡΠΏΠΈΡΠΎΠΊ-ΡΠΈΠΏΠΎΠ² opt )
ΡΠΏΠΈΡΠΎΠΊ-ΡΠΈΠΏΠΎΠ²:
ΠΈΠΌΡ-ΡΠΈΠΏΠ°
ΡΠΏΠΈΡΠΎΠΊ-ΡΠΈΠΏΠΎΠ² , ΠΈΠΌΡ-ΡΠΈΠΏΠ°
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
void f() throw (X,Y)
{
//β¦
}
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π΅ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠΈΡΡΠ°ΡΠΈΡ, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ unexpected(), ΡΠΌ. Β§R.15.8.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ·ΡΠΊΠ° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΡΠΈ Π΅Π³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π·Π°ΠΏΡΡΠΊ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π½Π΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ-ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΡΡ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅.
Π€ΡΠ½ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΠΎΡΠΎΠ±ΠΎΠΉ-ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π»ΡΠ±ΡΡ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ-ΠΎΡΠΎΠ±ΡΡ -ΡΠΈΡΡΠ°ΡΠΈΠΉ (throw()) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ.
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° X, ΡΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ ΠΎΠ±ΡΠΈΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ ΠΎΡ X.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΠΎΡΠΎΠ±ΠΎΠΉ-ΡΠΈΡΡΠ°ΡΠΈΠΈ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
R.15.6 Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠΌΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ ΡΠ΅Π°ΠΊΡΠΈΠΈ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΡΠ°ΠΌΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
terminate() ΠΈ unexpected().
R.15.6.1 Π€ΡΠ½ΠΊΡΠΈΡ terminate()
ΠΠ½ΠΎΠ³Π΄Π° ΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ Π³ΡΡΠ±ΡΠΌ ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
- ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠΌΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠΌΠΈ Π½Π΅ ΡΠΌΠΎΠ³ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π»Ρ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΉ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ;
- ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠΌΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠΌΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΡΡΠ΅ΠΊΠ°;
- ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ, Π²ΡΠ·Π²Π°Π½Π½ΡΠΉ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°ΡΠΊΡΡΡΠΊΠΈ ΡΡΠ΅ΠΊΠ° ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΌ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°ΠΏΡΡΡΠΈΠ² ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ.
Π ΡΡΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
void terminate();
ΠΠ½Π° Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° ΡΠΊΠ°Π·Π°Π½Π° ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ set_terminate():
typedef void(*PFV)();
PFV set_terminate(PFV);
Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π·Π°Π΄Π°Π½Π° Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π΅ set_terminate(), Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ terminate() Π²ΡΠ·ΡΠ²Π°Π΅Ρ abort().
ΠΡΠ±ΠΎΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ terminate() ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΡΠ°Π΅ΡΡΡ Π²Π΅ΡΠ½ΡΡΡΡΡ Π² Π²ΡΠ·Π²Π°Π²ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
R.15.6.2 Π€ΡΠ½ΠΊΡΠΈΡ unexpected()
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΠΌΠ΅ΡΡΠ°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ-ΠΎΡΠΎΠ±ΠΎΠΉ-ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½Π΅ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΎΡΠΎΠ±ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
void unexpected();
ΠΠ½Π° Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π·Π°Π΄Π°Π½Π° ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ set_unexpected():
typedef void(*PFV)();
PFV set_unexpected(PFV);
Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π·Π°Π΄Π°Π½Π° Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π΅ set_unexpected(), Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ unexpected() Π²ΡΠ·ΡΠ²Π°Π΅Ρ terminate(). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ terminate() Π²ΡΠ·ΡΠ²Π°Π΅Ρ abort(), ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈ ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ.