ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΈΠΌΡΠ½ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .
Π‘ΡΡΠ½ΠΎΡΡΠΈ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ Π·Π° ΡΡΡΠ½ΠΎΡΡΠΈ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π‘ΡΡΠ½ΠΎΡΡΠΈ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π²Π½Π΅ Π²ΡΠ΅Ρ
Π±Π»ΠΎΠΊΠΎΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΡΠ½. ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΈ Π½Π° Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Ρ Π²Π΅Π΄ΡΡΠΈΠΌ ::. Π₯ΠΎΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΎΠ½ΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΡΠ½.
ΠΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²Π½ΡΡΡΠΈ ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
namespace ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ { ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ }
|
(1) | ||||||||
inline namespace ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ { ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ }
|
(2) | (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) | |||||||
namespace { ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ }
|
(3) | ||||||||
ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½::ΠΈΠΌΡ
|
(4) | ||||||||
using namespace ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½;
|
(5) | ||||||||
using ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½::ΠΈΠΌΡ;
|
(6) | ||||||||
namespace ΠΈΠΌΡ = ΠΏΠΎΠ»Π½ΠΎΠ΅-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ-ΠΈΠΌΡΠ½ ;
|
(7) | ||||||||
namespace ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½:: ΠΈΠΌΡ { ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ }
|
(8) | (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++17) | |||||||
namespace ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½::inline ΠΈΠΌΡ { ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ
|
(9) | (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++20) | |||||||
namespace A::B::C { ... } ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ namespace A { namespace B { namespace C { ... } } }.namespace A::B::inline C { ... } ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ namespace A::B { inline namespace C { ... } }. inline ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π»ΡΠ±ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΊΡΠΎΠΌΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ: namespace A::inline B::C {} ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ namespace A { inline namespace B { namespace C {} } }.
ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
inline(Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) namespace Π°ΡΡΠΈΠ±ΡΡΡ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ { ΡΠ΅Π»ΠΎ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ }
|
|||||||||
inline
|
β | (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) Π΅ΡΠ»ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ, Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΡΠ½ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ (ΡΠΌΠΎΡΡΠΈΡΠ΅ Π½ΠΈΠΆΠ΅). ΠΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½, Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅-ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ inline
| ||
| Π°ΡΡΠΈΠ±ΡΡΡ | β | (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++17) Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² | ||
| ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ | β | Π»ΠΈΠ±ΠΎ
| ||
| ΡΠ΅Π»ΠΎ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ | β | Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½) |
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, Π²ΠΊΠ»ΡΡΠ°Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ (ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½), ΠΏΠΎΠΈΡΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ Π² ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ (Π½Π΅ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½), ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΊΠ°ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈΠ»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Π²Π½ΡΡΡΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½.
Π’Π΅Π»ΠΎ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΊΠΎΡΠΎΡΠ°Ρ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠΎΠΈΡΠΊ ΠΈΠΌΠ΅Π½ΠΈ.
ΠΡΠ΅ ΠΈΠΌΠ΅Π½Π°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΡΠ΅Π»Π΅-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½), ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ (ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Π²Π΅Π»ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ), ΠΈΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ (ΠΊΠΎΡΠΎΡΠΎΠ΅ "ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΡΠΊΡΡΠ»ΠΎ" ΡΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½)
ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π² ΡΠ΅Π»Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π²Π½Π΅ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²Π½ΠΎΠΉ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
namespace Q {
namespace V { // V ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Q ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π² Q
// namespace Q::V { // C++17 Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π΄Π²ΡΠΌ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΡΡΡΠΎΠΊΠ°ΠΌ
class C { void m(); }; // C ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ V ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π² V
// C::m ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°
void f(); // f ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ V, Π½ΠΎ Π·Π΄Π΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°
}
void V::f() // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ f, ΠΊΠ°ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° V, Π²Π½Π΅ V
// ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΎΡ
Π²Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ f, ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ
// ΠΈΠΌΡΠ½, Q ΠΈ Q::V
{
extern void h(); // ΠΡΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ::Q::V::h
}
void V::C::m() // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ V::C::m Π²Π½Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ (ΠΈ ΡΠ΅Π»Π° ΠΊΠ»Π°ΡΡΠ°)
// Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΡΡΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½,
// Q ΠΈ Q::V
{
}
}
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²Π½Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ
- ΠΏΠΎΡΠ»Π΅ ΡΠΎΡΠΊΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ,
- ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈ
- ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΡΠ½, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ (Π²ΠΊΠ»ΡΡΠ°Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++14)
namespace Q {
namespace V { // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅-ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ Π΄Π»Ρ V
void f(); // ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Q::V::f
}
void V::f() {} // OK
void V::g() {} // ΠΡΠΈΠ±ΠΊΠ°: g() Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ V
namespace V { // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ Π΄Π»Ρ V
void g(); // ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Q::V::g
}
}
namespace R { // Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΡΠ½ Π΄Π»Ρ Q
void Q::V::g() {} // ΠΡΠΈΠ±ΠΊΠ°: Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Q::V::g Π²Π½ΡΡΡΠΈ R
}
void Q::V::g() {} // OK: Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Q
ΠΠΌΠ΅Π½Π°, Π²Π²Π΅Π΄ΡΠ½Π½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ friend Π² Π½Π΅Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ X, ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ X, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ (Π½ΠΈ Π΄Π»Ρ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ, Π½ΠΈ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ), Π΅ΡΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Π΄ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°. Π’Π°ΠΊΠΎΠ΅ ΠΈΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ADL, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΡΠ°ΠΊ ΠΈ ΠΊΠ»Π°ΡΡΡ.
Π’ΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌΠΎΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌ friend-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²Π°ΡΡ Ρ ΡΠ°Π½Π΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
void h(int);
namespace A {
class X {
friend void f(X); // A::f ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ
class Y {
friend void g(); // A::g ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ
friend void h(int); // A::h ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ, Π½Π΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° Ρ ::h
};
};
// A::f, A::g ΠΈ A::h Π½Π΅ Π²ΠΈΠ΄Π½Ρ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
// Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ A
X x;
void g() { // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ A::g
f(x); // A::X::f Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· ADL
}
void f(X) {} // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ A::f
void h(int) {} // ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ A::h
// A::f, A::g ΠΈ A::h ΡΠ΅ΠΏΠ΅ΡΡ Π²ΠΈΠ΄Π½Ρ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
// ΠΈ ΠΎΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ·ΡΡ A::X ΠΈ A::X::Y
}
ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½, ΡΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ (ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅). ΠΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΡΠ°Π½Π·ΠΈΡΠ½ΠΎΠ΅: Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ N ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ M, ΠΊΠΎΡΠΎΡΠΎΠ΅, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ O, ΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ O ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ M ΠΈΠ»ΠΈ N.
{ // Π² C++14, std::literals ΠΈ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ
using namespace std::string_literals; // Π΄Π΅Π»Π°Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ operator""s
// ΠΈΠ· std::literals::string_literals
auto str = "abc"s;
}
{
using namespace std::literals; // Π΄Π΅Π»Π°Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ ΠΊΠ°ΠΊ
// std::literals::string_literals::operator""s,
// ΡΠ°ΠΊ ΠΈ std::literals::chrono_literals::operator""s
auto str = "abc"s;
auto min = 60s;
}
{
using std::operator""s; // Π΄Π΅Π»Π°Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ
// ΠΈ std::literals::string_literals::operator""s
// ΠΈ std::literals::chrono_literals::operator""s
auto str = "abc"s;
auto min = 60s;
}
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ: ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΡΠ°Π·Π½ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΡΠ½, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°ΡΡΠΈΡΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²Π½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ namespace Lib
{
inline namespace Lib_1
{
template <typename T> class A;
}
template <typename T> void g(T) { /* ... */ }
}
/* ... */
struct MyClass { /* ... */ };
namespace Lib
{
template<> class A<MyClass> { /* ... */ };
}
int main()
{
Lib::A<MyClass> a;
g(a); // ΠΎΠΊ, Lib ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΡΠ½ A
}
|
(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) |
ΠΠ΅Π·ΡΠΌΡΠ½Π½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅-Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠ³ΠΎ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Π² ΡΠΎΡΠΌΠ΅
inline(Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) namespace Π°ΡΡΠΈΠ±ΡΡΡ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) { ΡΠ΅Π»ΠΎ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ }
|
|||||||||
inline
|
β | (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) Π΅ΡΠ»ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ, Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΡΠ½ |
| Π°ΡΡΠΈΠ±ΡΡΡ | β | (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++17) Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² |
ΠΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠΎ Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ (ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π½Π΅ΡΠ²Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ}, Π½ΠΎ Π½Π΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°, Π·Π°Π²ΠΈΡΡΡΠ΅Π³ΠΎ ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ).
namespace {
int i; // ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ::(ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)::i
}
void f() {
i++; // ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ::(ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)::i
}
namespace A {
namespace {
int i; // A::(ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)::i
int j; // A::(ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)::j
}
void g() { i++; } // A::ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅::i++
}
using namespace A; // Π²Π²ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΈΠ· A Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½
void h() {
i++; // ΠΎΡΠΈΠ±ΠΊΠ°: ::(ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)::i ΠΈ ::A::(ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)::i Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ
A::i++; // ok, ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ::A::(ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)::i
j++; // ok, ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ::A::(ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅)::j
}
|
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° Π² Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΎΠ½ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠΌΡ ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎ. |
(Π΄ΠΎ C++11) |
|
ΠΠ΅Π·ΡΠΌΡΠ½Π½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΡΠΌΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ Π² Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½, ΠΈΠΌΠ΅ΡΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅, ΠΈ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ ΠΈΠΌΡ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π² Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½, ΠΈΠΌΠ΅Π΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅. |
(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) |
Using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ
ΠΠ²ΠΎΠ΄ΠΈΡ ΠΈΠΌΡ Π² ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π³Π΄Π΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΎ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅.
using typename(Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ-Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ-ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ;
|
(Π΄ΠΎ C++17) | ||||||||
using ΡΠΏΠΈΡΠΎΠΊ-Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡΠΎΠ² ;
|
(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++17) | ||||||||
| typename | β | ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ typename ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
ΠΈΠΌΡΠ½, ΠΊΠΎΠ³Π΄Π° using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄ΠΈΡ ΡΠΈΠΏ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ»Π°ΡΡΠ°
|
| ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ-Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ-ΠΈΠΌΠ΅Π½ΠΈ | β | ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠΌΡΠ½ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ::, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ°ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ :: ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΡΠ½.
|
| Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ | β | Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ |
| ΡΠΏΠΈΡΠΎΠΊ-Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡΠΎΠ² | β | ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π½ΡΠΉ Π·Π°ΠΏΡΡΡΠΌΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΠΎΡΠΌΠ΅ typename(Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ-Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ-ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. ΠΠ° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΠ΅, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, Ρ
ΠΎΡΡ ΡΡΠ° ΡΠΎΡΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ
ΠΊΠ»Π°ΡΡΠΎΠ²
|
using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Π² Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈ Π±Π»ΠΎΠΊΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΈΠ»ΠΈ Π΄Π»Ρ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΈΠ»ΠΈ Π΄Π»Ρ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π΅ΠΉ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½, ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++20).
|
using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ using-Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡΠΎΠΌ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ using-Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡΠΎΠΌ. |
(Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++17) |
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΎΠ±ΡΠ²Π»Π΅Π½ΠΈΠ΅ using.
ΠΠΌΠ΅Π½Π°, Π²Π²Π΅Π΄ΡΠ½Π½ΡΠ΅ Π² ΠΎΠ±Π»Π°ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°, Π²ΠΊΠ»ΡΡΠ°Ρ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ:
void f();
namespace A {
void g();
}
namespace X {
using ::f; // Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ f ΡΠ΅ΠΏΠ΅ΡΡ Π²ΠΈΠ΄Π½Π° ΠΊΠ°ΠΊ ::X::f
using A::g; // A::g ΡΠ΅ΠΏΠ΅ΡΡ Π²ΠΈΠ΄Π½Π° ΠΊΠ°ΠΊ ::X::g
using A::g, A::g; // (C++17) OK: Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ
// Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
}
void h()
{
X::f(); // Π²ΡΠ·ΠΎΠ² ::f
X::g(); // Π²ΡΠ·ΠΎΠ² A::g
}
ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ Π²Π·ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ Π²Π²ΠΎΠ΄ΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ, ΡΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ using). ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ»Π°ΡΡΠ°: ΡΠ°ΡΡΠΈΡΠ½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π²Π²Π΅Π΄ΡΠ½Π½ΡΠ΅ ΠΏΠΎΠ·ΠΆΠ΅, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΈΠ΄Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΡ ΠΏΠΎΠΈΡΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΎΠ½.
namespace A {
void f(int);
}
using A::f; // ::f ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ A::f(int)
namespace A { // ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
void f(char); // Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ::f
}
void foo() {
f('a'); // Π²ΡΠ·ΠΎΠ² f(int), Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ f(char).
}
void bar() {
using A::f; // ΡΡΠ° f ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π»Ρ A::f(int), ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ A::f(char)
f('a'); // Π²ΡΠ·ΠΎΠ² f(char)
}
Using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½, ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅Π»Ρ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ (Π΄ΠΎ C++20). ΠΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΎΡ Π² using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ Π²Π²ΠΎΠ΄ΠΈΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π΅ΠΉ.
ΠΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΊΡΡΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΊ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌ:
namespace A {
int x;
}
namespace B {
int i;
struct g { };
struct x { };
void f(int);
void f(double);
void g(char); // OK: ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ g ΡΠΊΡΡΠ²Π°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ g
}
void func() {
int i;
using B::i; // ΠΎΡΠΈΠ±ΠΊΠ°: i ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π΄Π²Π°ΠΆΠ΄Ρ
void f(char);
using B::f; // OK: f(char), f(int), f(double) ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠ°ΠΌΠΈ
f(3.5); // Π²ΡΠ·ΠΎΠ² B::f(double)
using B::g;
g('a'); // Π²ΡΠ·ΠΎΠ² B::g(char)
struct g g1; // ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ g1 Ρ ΡΠΈΠΏΠΎΠΌ ΡΡΡΡΠΊΡΡΡΡ B::g
using B::x;
using A::x; // OK: ΡΠΊΡΡΠ²Π°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ B::x
x = 99; // ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ A::x
struct x x1; // ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ x1 Ρ ΡΠΈΠΏΠΎΠΌ ΡΡΡΡΠΊΡΡΡΡ B::x
}
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ»Π° Π²Π²Π΅Π΄Π΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΎ (Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ). ΠΡΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ» Π²Π²Π΅Π΄ΡΠ½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠΈΠΏΠΎΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½Π°, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΎ. ΠΠ²Π° using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²Π²ΠΎΠ΄ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²ΡΠ·Π²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
namespace B {
void f(int);
void f(double);
}
namespace C {
void f(int);
void f(double);
void f(char);
}
void h() {
using B::f; // Π²Π²ΠΎΠ΄ΠΈΡ B::f(int), B::f(double)
using C::f; // Π²Π²ΠΎΠ΄ΠΈΡ C::f(int), C::f(double) ΠΈ C::f(char)
f('h'); // Π²ΡΠ·ΠΎΠ² C::f(char)
f(1); // ΠΎΡΠΈΠ±ΠΊΠ°: B::f(int) ΠΈΠ»ΠΈ C::f(int)?
void f(int); // ΠΎΡΠΈΠ±ΠΊΠ°: f(int) ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Ρ C::f(int) ΠΈ B::f(int)
}
ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½, Π½ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Ρ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ:
namespace X {
namespace M {
void g(); // ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°, Π½ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ X::M::g()
}
using M::g;
void g(); // ΠΡΠΈΠ±ΠΊΠ°: ΠΏΠΎΠΏΡΡΠΊΠ° ΠΎΠ±ΡΡΠ²ΠΈΡΡ X::g, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Ρ X::M::g()
}
Π Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅ΠΌ ΡΠΌΡΡΠ»Π΅, ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ ΠΈΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, Π²ΡΠ΅Π³Π΄Π° Π²Π²ΠΎΠ΄ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ, Π° Π½Π΅ Π² Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½. ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ²Π½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΈ ΡΠ²Π½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π²ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½: ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π½Π΅ Π²Π²ΠΎΠ΄ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½.
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ using
using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π±Π»ΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ:
Π°ΡΡΠΈΠ±ΡΡΡ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) using namespace ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎ-Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ-ΠΈΠΌΠ΅Π½ΠΈ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ ;
|
(1) | ||||||||
| Π°ΡΡΠΈΠ±ΡΡΡ | β | (Π½Π°ΡΠΈΠ½Π°Ρ Ρ C++11) Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΡΠΎΠΉ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π΅ |
| ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ-Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ-ΠΈΠΌΠ΅Π½ΠΈ | β | ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠΌΡΠ½ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ::, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ°ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ :: ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½. ΠΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΈΠΌΡΠ½ Π² ΡΡΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ lookup ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½.
|
| ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ | β | ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½. ΠΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΏΠΎΠΈΡΠΊ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½ |
Using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠ°. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΠ»Π΅ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΈ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠΌΡ ΠΈΠ· ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌ ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ°ΠΊ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ, ΡΠ°ΠΊ ΠΈ ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½.
Using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΠΌΡΠ½ Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½Π° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ), ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π΅ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ ΠΈΠΌΡΠ½.
Using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ°Π½Π·ΠΈΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°: Π΅ΡΠ»ΠΈ ΠΎΠ±Π»Π°ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°ΠΌΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°-ΠΈΠΌΡΠ½-2, ΡΡΡΠ΅ΠΊΡ ΡΠ°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ using Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΏΠΎΡΠ²Π»ΡΠ»ΠΈΡΡ Π²Π½ΡΡΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ. ΠΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΡΡΠΈ ΡΡΠ°Π½Π·ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΠΎΠΈΡΠΊ ΠΈΠΌΠ΅Π½ΠΈ.
namespace A {
int i;
}
namespace B {
int i;
int j;
namespace C {
namespace D {
using namespace A; // Π²ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΈΠ· A Π²Π²ΠΎΠ΄ΡΡΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½
int j;
int k;
int a = i; // i ΡΡΠΎ B::i, ΡΠ° ΠΊΠ°ΠΊ A::i ΡΠΊΡΡΡΠΎ ΠΏΠΎΠ΄ B::i
}
using namespace D; // ΠΈΠΌΠ΅Π½Π° ΠΈΠ· D Π²Π²ΠΎΠ΄ΡΡΡΡ Π² C
// ΠΈΠΌΠ΅Π½Π° ΠΈΠ· A Π²Π²ΠΎΠ΄ΡΡΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½
int k = 89; // OK, ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π²Π²Π΅Π΄ΡΠ½Π½ΠΎΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ using
int l = k; // Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΡ: C::k ΠΈΠ»ΠΈ D::k
int m = i; // ok: B::i ΡΠΊΡΡΠ²Π°Π΅Ρ A::i
int n = j; // ok: D::j ΡΠΊΡΡΠ²Π°Π΅Ρ B::j
}
}
ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Π΄Π»Ρ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΊ Π½Π΅ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ/ΠΈΠ»ΠΈ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ, ΡΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Π²ΠΈΠ΄Π½Ρ ΡΠ΅ΡΠ΅Π· using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ)
namespace D {
int d1;
void f(char);
}
using namespace D; // Π²Π²ΠΎΠ΄ΠΈΡ D::d1, D::f, D::d2, D::f,
// E::e ΠΈ E::f Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½!
int d1; // OK: Π½Π΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° Ρ D::d1 ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ
namespace E {
int e;
void f(int);
}
namespace D { // ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
int d2;
using namespace E; // ΡΡΠ°Π½Π·ΠΈΡΠ½Π°Ρ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°
void f(int);
}
void f() {
d1++; // ΠΎΡΠΈΠ±ΠΊΠ°: Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ::d1 ΠΈΠ»ΠΈ D::d1
::d1++; // OK
D::d1++; // OK
d2++; // OK, d2 ΡΡΠΎ D::d2
e++; // OK: e ΡΡΠΎ E::e ΠΈΠ·-Π·Π° ΡΡΠ°Π½Π·ΠΈΡΠ½ΠΎΠ³ΠΎ using
f(1); // ΠΎΡΠΈΠ±ΠΊΠ°: Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΡ: D::f(int) ΠΈΠ»ΠΈ E::f(int)?
f('a'); // OK: f(char) ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΊ D::f(char)
}
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using namespace std; Π² Π»ΡΠ±ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ Π²Π²ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠΌΡ ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ std Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΡΠ½, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈ std ΠΈ Π»ΡΠ±ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½), ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°ΠΌ ΠΈΠΌΡΠ½. ΠΡΠ° ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ using ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡΡΡ ΠΏΠ»ΠΎΡ
ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (SF.7: ΠΠ΅ ΠΏΠΈΡΠΈΡΠ΅ using namespace Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°).
| ΠΠ°ΠΊΡΠΎΡ Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | Π‘ΡΠ°Π½Π΄Π°ΡΡ | Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ |
|---|---|---|---|
__cpp_namespace_attributes |
201411L |
(C++17) | ΠΡΡΠΈΠ±ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΡΠ½ |
ΠΡΠΈΠΌΠ΅Ρ
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ Π±ΡΠ» ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ std.
#include <vector>
namespace vec {
template< typename T >
class vector {
// ...
};
} // vec
int main()
{
std::vector<int> v1; // Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π΅ΠΊΡΠΎΡ.
vec::vector<int> v2; // ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π²Π΅ΠΊΡΠΎΡ.
v1 = v2; // ΠΡΠΈΠ±ΠΊΠ°: v1 ΠΈ v2 ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
{
using namespace std;
vector<int> v3; // Π’ΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ std::vector
v1 = v3; // OK
}
{
using vec::vector;
vector<int> v4; // Π’ΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ vec::vector
v2 = v4; // OK
}
return 0;
}
ΠΡΡΡΡΡ ΠΎ Π΄Π΅ΡΠ΅ΠΊΡΠ°Ρ
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΈΠ»ΠΎΠΉ ΠΊ ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ C++:
| ΠΠΎΠΌΠ΅Ρ | ΠΡΠΈΠΌΠ΅Π½ΡΠ½ | ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ | ΠΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ |
|---|---|---|---|
| CWG 101 | C++98 | ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠ° ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ, ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ (Π±Π΅Π· Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ) |
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΡΡΡ |
| CWG 373 | C++98 | ΠΏΠΎΠΈΡΠΊ ΡΡΠΈΡΡΠ²Π°Π» ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π² ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π΅ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ (ΡΡΠΎ Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½) |
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ Π² ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°Ρ using-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² |
| CWG 460 | C++98 | using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ | Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ |
| CWG 565 | C++98 | using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²Π²ΠΎΠ΄ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΎΡΡ ΠΊ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ |
ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ |
| CWG 986 | C++98 | Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° Π±ΡΠ»Π° ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎΠΉ Π΄Π»Ρ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° | ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π½Π΅ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° |
| CWG 987 | C++98 | ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½, ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ |
Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½Ρ |
| CWG 1021 | C++98 | Π±ΡΠ»ΠΎ Π½Π΅ΡΡΠ½ΠΎ, ΡΡΠΈΡΠ°Π΅ΡΡΡ Π»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ using-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ |
Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ |
| CWG 1838 | C++14 | Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ, Π½ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ using |
Π½Π΅ΠΏΠΎΠ»Π½ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ ΠΈΠΌΡΠ½ |
| CWG 2155 | C++98 | ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ CWG ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° 1838 Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΎΡΡ ΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ |
ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ |
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅
| ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ | ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ |