Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (Π΄ΠΎ C++17)
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΡΠΌΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
throw(ΡΠΏΠΈΡΠΎΠΊ-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²-ΡΠΈΠΏΠΎΠ² (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ))
|
(1) | (ΡΡΡΠ°ΡΠ΅Π»ΠΎ Π² C++11) (ΡΠ΄Π°Π»Π΅Π½ΠΎ Π² C++17) | |||||||
| ΡΠΏΠΈΡΠΎΠΊ-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²-ΡΠΈΠΏΠΎΠ² | β | ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π½ΡΠΉ Π·Π°ΠΏΡΡΡΠΌΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ²-ΡΠΈΠΏΠΎΠ², Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΠΈΠΏΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΠ΅ (...) (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) |
Π―Π²Π½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΡΠ»ΠΊΠ΅ Π½Π° ΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΈΠ»ΠΈ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΏΠΎΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠ»ΠΈ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
void f() throw(int); // OK: ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
void (*pf)() throw (int); // OK: ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ
void g(void pfa() throw(int)); // OK: ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ
typedef int (*pf)() throw(int); // ΠΡΠΈΠ±ΠΊΠ°: ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ typedef
ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Ρ ΡΠΈΠΏΠΎΠΌ T, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π² Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ Π½Π΅Π³ΠΎ ΡΠΈΠΏΠ°.
ΠΠ΅ΠΏΠΎΠ»Π½ΡΠ΅ ΡΠΈΠΏΡ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π½Π΅ΠΏΠΎΠ»Π½ΡΠ΅ ΡΠΈΠΏΡ, ΠΎΡΠ»ΠΈΡΠ½ΡΠ΅ ΠΎΡ cv void*, ΠΈ ΡΡΡΠ»ΠΎΡΠ½ΡΠ΅ ΡΠΈΠΏΡ rvalue (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. Π’ΠΈΠΏΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠΈΠΏΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, cv-ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ. Π Π°Π·ΡΠ΅ΡΠ΅Π½Ρ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11).
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠ΅ΠΉ Π½Π°Π±ΠΎΡ ΡΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΡΡ (ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Ρ) (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11), Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠ΅ΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡΠ΅ΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°, Π½Π΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ std::unexpected. Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ std::terminate, Π½ΠΎ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ (ΡΠ΅ΡΠ΅Π· std::set_unexpected), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ std::terminate ΠΈΠ»ΠΈ Π²ΡΠ΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π²ΡΠ·Π²Π°Π½Π½ΠΎΠ΅ std::unexpected, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠ°ΡΠΊΡΡΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ, ΠΈ std::bad_exception ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ std::bad_exception. ΠΠ½Π°ΡΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ std::terminate.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ f, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ pf ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅ΠΌΠ΅Π½Ρ pmf ΠΈΠΌΠ΅ΡΡ Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π±ΡΠΎΡΠ΅Π½Ρ. ΠΠ°Π±ΠΎΡ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ΄Π°Π½ΠΎ Π»ΡΠ±ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
f, pf ΠΈΠ»ΠΈ pmf ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π²ΡΠ΅Ρ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (Π΄ΠΎ C++11), Π½Π°Π±ΠΎΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠΈΠΏΠΎΠ², ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ
Π² ΡΡΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.|
2) ΠΠ½Π°ΡΠ΅, Π΅ΡΠ»ΠΈ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ f, pf ΠΈΠ»ΠΈ pmf ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ noexcept(true), Π½Π°Π±ΠΎΡ ΠΏΡΡΡ.
|
(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) |
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΠ»Ρ Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ², ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΎΠ²) ΠΈ Π΄Π»Ρ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² Π²ΡΠ΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ: ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ/ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ/Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΡ Π½Π΅Π²Π°ΡΠΈΠ°Π½ΡΠ½ΡΡ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΠΏΡΡΠΌΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈ, Π³Π΄Π΅ ΡΡΠΎ ΡΠΌΠ΅ΡΡΠ½ΠΎ, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ (Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠ°ΠΊ Π²ΡΠ΅Π³Π΄Π°).
ΠΠ°ΠΆΠ΄ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ e ΠΈΠΌΠ΅Π΅Ρ Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΠ°Π±ΠΎΡ ΠΏΡΡΡ, Π΅ΡΠ»ΠΈ e ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈΠ½Π°ΡΠ΅ ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡΠΎΠ² ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π²ΡΠ΅Ρ
Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΏΠΎΠ΄Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ e (Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ, Π·Π°Π²ΠΈΡΡΡΠΈΠΌ ΠΎΡ ΡΠΎΡΠΌΡ e, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
e ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΡΡΡ g ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΎΠ³Π΄Π°
- Π΅ΡΠ»ΠΈ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ
gΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉgΠ΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊ Π½Π°Π±ΠΎΡΡ;
- Π΅ΡΠ»ΠΈ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ
|
(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) |
- ΠΈΠ½Π°ΡΠ΅ Π½Π°Π±ΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ².
e Π½Π΅ΡΠ²Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ (ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ new ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π°, ΠΈΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°), ΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.e ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ throw, ΡΠΎ Π½Π°Π±ΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ Π΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠΌ, ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ throw (Π±Π΅Π· ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°).e ΡΠ²Π»ΡΠ΅ΡΡΡ dynamic_cast ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠΉ ΡΠΈΠΏ, Π½Π°Π±ΠΎΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· std::bad_cast.e ΡΠ²Π»ΡΠ΅ΡΡΡ typeid, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½Π½ΡΠΌ ΠΊ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠΉ ΡΠΈΠΏ, Π½Π°Π±ΠΎΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· std::bad_typeid.|
6) ΠΡΠ»ΠΈ e ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ new Ρ Π½Π΅ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°, Π° Π²ΡΠ±ΡΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΏΡΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π½Π°Π±ΠΎΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· std::bad_array_new_length.
|
(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) |
void f() throw(int); // Π½Π°Π±ΠΎΡ f() ΡΠ°Π²Π΅Π½ "int"
void g(); // Π½Π°Π±ΠΎΡ g() ΡΡΠΎ Π½Π°Π±ΠΎΡ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ²
struct A { A(); }; // Π½Π°Π±ΠΎΡ "new A" ΡΡΠΎ Π½Π°Π±ΠΎΡ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ²
struct B { B() noexcept; }; // Π½Π°Π±ΠΎΡ "B()" ΠΏΡΡΡ
struct D() { D() throw (double); }; // Π½Π°Π±ΠΎΡ new D ΡΡΠΎ Π½Π°Π±ΠΎΡ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ²
ΠΡΠ΅ Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11)ΠΈΠΌΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π²ΡΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΡΠ»ΠΈ Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ², Π½Π΅ΡΠ²Π½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠ΅ΠΉ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅Π²ΡΡΠ°Π·ΠΈΠΌΠ° Π² ΠΊΠΎΠ΄Π΅ ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ) (Π΄ΠΎ C++11)ΡΡΠΎ
noexcept(false)(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11). - ΠΠ½Π°ΡΠ΅, Π΅ΡΠ»ΠΈ Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π½Π΅ ΠΏΡΡΡ, Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π²ΡΠ΅ ΡΠΈΠΏΡ ΠΈΠ· Π½Π°Π±ΠΎΡΠ°.
- ΠΠ½Π°ΡΠ΅ Π½Π΅ΡΠ²Π½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄
throw()(Π΄ΠΎ C++11)noexcept(true)(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11).
struct A
{
A(int = (A(5), 0)) noexcept;
A(const A&) throw();
A(A&&) throw();
~A() throw(X);
};
struct B
{
B() throw();
B(const B&) = default; // ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ "noexcept(true)"
B(B&&, int = (throw Y(), 0)) noexcept;
~B() throw(Y);
};
int n = 7;
struct D : public A, public B
{
// ΠΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ (ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠΈΠΏΠ°)
// stdβ::bad_array_new_length, Π½ΠΎ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ
// ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ
(void*) new (std::nothrow) int[n];
// D ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ:
// D::D() throw(X, std::bad_array_new_length);
// D::D(const D&) noexcept(true);
// D::D(D&&) throw(Y);
// D::~D() throw(X, Y);
};
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π»ΡΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ C++98, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. ΠΠ΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ C++17 ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ.
#include <cstdlib>
#include <exception>
#include <iostream>
class X {};
class Y {};
class Z : public X {};
class W {};
void f() throw(X, Y)
{
bool n = false;
if (n) throw X(); // OK, Π²ΡΠ·ΠΎΠ²Π΅Ρ std::terminate()
if (n) throw Z(); // ΡΠ°ΠΊΠΆΠ΅ OK
throw W(); // Π²ΡΠ·ΠΎΠ²Π΅Ρ std::unexpected()
}
void handler()
{
std::cerr << "ΠΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ!\n"; // ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ±ΡΠΎΡ
std::abort();
}
int main()
{
std::set_unexpected(handler);
f();
}
ΠΡΠ²ΠΎΠ΄:
ΠΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ!
ΠΡΡΡΡΡ ΠΎ Π΄Π΅ΡΠ΅ΠΊΡΠ°Ρ
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΈΠ»ΠΎΠΉ ΠΊ ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ C++:
| ΠΠΎΠΌΠ΅Ρ | ΠΡΠΈΠΌΠ΅Π½ΡΠ½ | ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ | ΠΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ |
|---|---|---|---|
| CWG 25 | C++98 | ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ |
ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΡΡΠ»ΠΎΠΊ |
| CWG 973 | C++98 | ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½ΠΎ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ |
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ |
| CWG 1267 | C++11 | ΡΡΡΠ»ΠΎΡΠ½ΡΠ΅ ΡΠΈΠΏΡ rvalue Π±ΡΠ»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ |
Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ |
| CWG 1351 | C++98 C++11 |
Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (C++98) ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (C++11) ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ Π² Π½Π΅ΡΠ²Π½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ |
Π½Π΅ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ |
| CWG 1777 | C++11 | ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ throw(T...) Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ, Π½Π΅Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠ΅ΠΉ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ TΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΡΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ |
Π½Π΅ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΡΡ |
| CWG 2191 | C++98 | Π½Π°Π±ΠΎΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ typeid ΠΌΠΎΠΆΠ΅ΡΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ bad_typeid, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ
|
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ bad_typeid, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎΠ²ΡΠ±ΡΠΎΡΠΈΡΡ |
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅
ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ noexcept(C++11)
|
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ |