Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ программирования Π½Π° Π‘++. 101 ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈ рСкомСндация». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 32

Автор Π“Π΅Ρ€Π± Π‘Π°Ρ‚Ρ‚Π΅Ρ€

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если Π°Π²Ρ‚ΠΎΡ€ X прСдоставляСт ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ X, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ пространствС ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ ΠΈ X. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ X, Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Π² состоянии Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этими ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ функциями Π±Π΅Π· явной ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΡ… ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ примСнСния инструкции using.

Бсылки

[Stroustrup00] Β§8.2, Β§10.3.2, Β§11.2.4 β€’ [Sutter00] Β§31-34

58. Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… пространствах ΠΈΠΌΠ΅Π½, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹

РСзюмС

ΠžΠ±Π΅Ρ€Π΅Π³Π°ΠΉΡ‚Π΅ ваши Ρ‚ΠΈΠΏΡ‹ ΠΎΡ‚ Π½Π΅ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ³ΠΎ поиска, зависящСго ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (argument-dependent lookup β€” ADL, извСстный Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ поиск ΠšΡ‘Π½ΠΈΠ³Π°); ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹ΠΉ поиск Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡƒΡ‚Π΅ΠΌ размСщСния Ρ‚ΠΈΠΏΠΎΠ² Π² своих собствСнных пространствах ΠΈΠΌΠ΅Π½ (вмСстС с нСпосрСдствСнно связанными с Π½ΠΈΠΌΠΈ свободными функциями; см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 57). Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ помСщСния Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ‚Π΅ ΠΆΠ΅ пространства ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²).

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

БлСдуя Π΄Π°Π½Π½ΠΎΠΌΡƒ совСту, Π²Ρ‹ смоТСтС ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ошибок Π² вашСм ΠΊΠΎΠ΄Π΅ ΠΈ нСобходимости Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΎΠ½ΠΊΠΈΠΌΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ языка, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ просто Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ.

Π’ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ новостСй:

#include <vector>


namespace N {

struct X { };

template<typename T>

int* operator+(T , unsigned) {/* Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия */}

}


int main() {

 std::vector<N::X> v(5);

 v[0];

}

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ v[0]; компилируСтся Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½ΠΎ Π½Π΅ Π²ΠΎ всСх. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΡΠΊΠ°Π·Π°Ρ‚ΡŒ эту Π΄Π»ΠΈΠ½Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. ΠžΡ‡Π΅Π½ΡŒ тонкая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° связана с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ vector<T>::operator[] спрятан ΠΊΠΎΠ΄ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ v.begin()+n, ΠΈ поиск ΠΈΠΌΠ΅Π½ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ operator+ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ пространства ΠΈΠΌΠ΅Π½ (Π² нашСм случаС N) Ρ‚ΠΈΠΏΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ инстанцирован Π²Π΅ΠΊΡ‚ΠΎΡ€ (Π² нашСм случаС X). ДостигнСт Π»ΠΈ поиск этого пространства ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ β€” зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ vector<T>::iterator Π² Π΄Π°Π½Π½ΠΎΠΉ вСрсии Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Однако Ссли поиск достигаСт N, Ρ‚ΠΎ здСсь ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ N::operator+. НаконСц, Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², компилятор ΠΌΠΎΠΆΠ΅Ρ‚ просто ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для vector<T>::iterator ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ N::operator+ ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅Π΅ соотвСтствиС, Ρ‡Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ std::operator+ ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½). (Один ΠΈΠ· способов ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ нСприятности Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€” Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ v.begin()+n Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ вносит Π½Π΅ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ настройки: Π»ΠΈΠ±ΠΎ Π½Π°Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΈΠΏ v.begin() Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ зависСл ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° шаблона, Π»ΠΈΠ±ΠΎ Π²Ρ‹Π·ΠΎΠ² operator+ слСдуСт ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π‘ΠΌ. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 65.)

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ говоря, вряд Π»ΠΈ Π²Π°ΠΌ удастся Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΈΠ½Π½ΡƒΡŽ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ сообщСния ΠΎΠ± ошибкС. Если Π²Π°ΠΌ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠ²Π΅Π·Π΅Ρ‚ ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ это сообщСниС ΠΎΠ± ошибкС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² случаС нСвСзСния Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ N::operator+ окаТСтся, ΠΊ Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π²ΠΏΠΎΠ»Π½Π΅ подходящим с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния компилятора, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° скомпилируСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π½ΠΎ Π²ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌΠΈ...

Π’Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ с этим ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Π±Ρ‹Π²Π°Π»ΠΎ Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ΅ Π² вашСй ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Ρ‡Ρ‚ΠΎ ваш ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с использованиСм стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΊ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ нСпонятным ошибкам компиляции? А послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ слСгка мСняли ваш ΠΊΠΎΠ΄, ΠΏΠΎΡ€ΠΎΠΉ просто мСняя мСстами ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ куски ΠΊΠΎΠ΄Π°, всС Π²Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Ρƒ вас ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСбольшоС Π½Π΅Π΄ΠΎΡƒΠΌΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Π³Π»ΡƒΠΏΠΎΠ³ΠΎ компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запутался Π² Ρ‚Ρ€Π΅Ρ… строках? ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всС ΠΌΡ‹ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ нСприятностСй ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ рассматриваСмая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‚.Π΅. ΠΊΠΎΠ³Π΄Π° ADL Π½Π°Ρ…ΠΎΠ΄ΠΈΠ» ΠΈΠΌΠ΅Π½Π° ΠΈΠ· нСподходящСго пространства ΠΈΠΌΠ΅Π½ просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ ΠΈΠ· этих пространств ΠΈΠΌΠ΅Π½ использовались поблизости Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ Π‘++ с Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ (ΠΈ это часто происходит Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅) ΠΏΡ€ΠΈ использовании Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π΅Ρ… ΠΆΠ΅ пространствах ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π² особСнности ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹), Π½Π΅ связанныС с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. ΠŸΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒΡΡ Π² эту Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ.

Основной Π²Ρ‹Π²ΠΎΠ΄ β€” Π²Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Π·Π½Π°Ρ‚ΡŒ всС эти тонкости. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” это Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ размСщСния свободных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ интСрфСйса Ρ‚ΠΈΠΏΠ° X, Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ пространствС ΠΈΠΌΠ΅Π½, Π³Π΄Π΅ находится X, ΠΈ Π² особСнности Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ‚ΠΎ ΠΆΠ΅ пространство ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π”Π°, стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘++ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ copy ΠΈΠ»ΠΈ distance, Π² Ρ‚ΠΎ ΠΆΠ΅ пространство ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ ΠΈ мноТСство Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ pair ΠΈΠ»ΠΈ vector. ВсС ΠΎΠ½ΠΈ находятся Π² ΠΎΠ΄Π½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½. Π­Ρ‚ΠΎ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ описанныС вСсьма Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас большС ΠΎΠΏΡ‹Ρ‚Π° ΠΈ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ слСдуСт ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ. НС Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ сдСлано Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

"ΠžΠ±ΠΎΡ€ΠΎΡ‚Π½Π°Ρ сторона" этого вопроса рассматриваСтся Π² Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ 57.

Бсылки

[Stroustrup00] Β§10.3.2, Β§11.2.4 β€’ [Sutter00] Β§34 β€’ [Sutter02] Β§39-40

59. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ using для пространств ΠΈΠΌΠ΅Π½ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #include

РСзюмС

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° using для пространств ΠΈΠΌΠ΅Π½ создана для вашСго удобства, Π° Π½Π΅ для Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…. Никогда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ объявлСния ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #include.

Π’Ρ‹Π²ΠΎΠ΄: Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using для пространств ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ using-объявлСния Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…. ВмСсто этого ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ всС ΠΈΠΌΠ΅Π½Π°. (Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ слСдуСт ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #include ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² тСкстС послС Π½ΠΈΡ….)

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ свободно ΠΈ Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ объявлСния ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using Π² своих Ρ„Π°ΠΉΠ»Π°Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ послС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² #include. НСсмотря Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ заявлСния ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ², объявлСния ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π»ΠΎΠΌ ΠΈ Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‚ Ρ†Π΅Π»ΠΈ пространств ΠΈΠΌΠ΅Π½. Они просто Π΄Π΅Π»Π°ΡŽΡ‚ пространства ΠΈΠΌΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Π² использовании.

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠΎΡ‰Π½ΠΎΠ΅ срСдство для устранСния нСоднозначности ΠΈΠΌΠ΅Π½. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ программисты Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° для своих Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½ΠΎ Π² Ρ‚ΠΎΠΌ Ρ€Π΅Π΄ΠΊΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΈ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ вмСстС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄Π΅, пространства ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. Для этого достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ явно ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π» имя, ΡƒΠΊΠ°Π·Π°Π², имя ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ пространства Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ случаС. Однако Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ нСоднозначности ΠΈΠΌΠ΅Π½ Π½Π΅ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΈ объявлСния using, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сущСствСнно ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ использованиС пространств ΠΈΠΌΠ΅Π½, сниТая количСство Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (программисту ΠΏΡ€ΠΈ использовании Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈ объявлСний using Π½Π΅ трСбуСтся всякий Ρ€Π°Π· явноС ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ пространству ΠΈΠΌΠ΅Π½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ имя). Π’ Ρ€Π΅Π΄ΠΊΠΈΡ… случаях ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΈΠΌΠ΅Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΈ объявлСния using Π½Π΅ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΈΡŽ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ возникшСй нСоднозначности.

Однако Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΈ объявлСния using ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для вашСго удобства ΠΈ Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ влияли Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄. Π’ частности, ΠΈΡ… нСльзя ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ Π³Π΄Π΅ ΠΏΠΎΠΏΠ°Π»ΠΎ, Π³Π΄Π΅ Π·Π° Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ сторонний ΠΊΠΎΠ΄. Π’ частности, ΠΈΡ… Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² этих Ρ„Π°ΠΉΠ»Π°Ρ…) ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #include (Ρ‚Π΅ΠΌ самым Π²Ρ‹ ΠΏΠΎ сути вноситС ΠΈΡ… Π² тСкст этих Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²).

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ программистов ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° using (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, using namespace A;) Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ загрязнСниС Π² случаС воздСйствия Π½Π° ΠΊΠΎΠ΄, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π½Π΅ΠΉ ΠΈ Π½Π΅ освСдомлСнный ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎ пространство ΠΈΠΌΠ΅Π½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄Π°ΠΆΠ΅ Ρ‚Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ Π±Ρ‹Π»ΠΈ Π²ΠΈΠ΄Π½Ρ‹, понятно, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ смысл ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ΠΊΠΎΠ΄Π°.

Но Π²ΠΎΡ‚ ΠΎΠ΄Π½Π° распространСнная ошибка: ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ использованиС объявлСния using Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ пространства ΠΈΠΌΠ΅Π½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, using N::Widget;) Π²ΠΏΠΎΠ»Π½Π΅ бСзопасно. Однако это Π½Π΅ Ρ‚Π°ΠΊ. Π’Π°ΠΊΠΈΠ΅ объявлСния, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, опасны, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΈΠΌ ΠΈ Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΌ способом. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄: