C ++ 11 рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реА ++ рдорд╛рдирдХ рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЬреИрд╕реЗ C #, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕реАрдзреЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрдИ рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ "рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ" рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА - рдФрд░ рдореИрдВ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реВрдВред
рд╕реА ++ 03 рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рд╕реБрдВрджрд░рддрд╛ рдореЗрдВ рднрд┐рдиреНрди рдирд╣реАрдВ рдереЗ рдФрд░ рдХреЗрд╡рд▓ рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рдереЗ, рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, C ++ 11 рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛:

std::string month; std::string days; std::cout << "Enter month name: "; std::cin >> month; SWITCH (month) { CASE("february"): days = "28 or 29"; break; CASE("april"): CASE("june"): CASE("september"): CASE("november"): days = "30"; break; CASE("january"): CASE("march"): CASE("may"): CASE("july"): CASE("august"): CASE("october"): CASE("december"): days = "31"; break; DEFAULT: days = "?"; break; } std::cout << month << " has " << days << " days." << std::endl; 

рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ C ++ 11 рд╕реЗ рдХреЙрдиреНрд╕реНрдЯреИрдХреНрд╕ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд▓рдЧрднрдЧ рд╕рднреА рдЧрдгрдирд╛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ - рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ "рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдмрд░ рдкрд░ рд▓рд╛рдн рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред


рд╣рдо рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐ рдпрд╣ рдПрдХ рдкреВрд░реНрдг-рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реНрд╡рд┐рдЪ рдерд╛ , рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЕрдВрджрд░ рддрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдЫрд┐рдкрд╛рдХрд░ рдЗрд╕рдХрд╛ "рдПрдореБрд▓реЗрд╢рди" рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ, рдФрд░ рдпрд╣ CASE рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмреЗрдХрд╛рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, END_STRING_SWITCH рдЬреИрд╕реЗ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдореИрдХреНрд░реЛрдЬрд╝ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдХрд▓рдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╣реА рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╕рд╛рдорд╛рдиреНрдп" рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЬрдм рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рддрд░реНрдХ рд╕рдорд╛рди рд╣реИрдВ? рдпрд╣ рд╕рд╣реА рд╣реИ, рд╕рдВрдХрд▓рдХ рддреБрд░рдВрдд рд╣рдореЗрдВ рдбрд╛рдВрдЯрддрд╛ рд╣реИ: "рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗрд╕ рд╡реИрд▓реНрдпреВ" , рдФрд░ рд╕рдВрдХрд▓рди рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреЛрдИ рд╕рдВрдХрд▓рдХ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрддрд┐рдо рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг, рд╕рд░рд▓ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ " std :: map with a string key" рдХрд╛ рдкреНрд░рд╕рд┐рджреНрдз рд╕рдВрд╕реНрдХрд░рдг рд╣рдореЗрдВ рднреА рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдореЗрдВ рджреА рдЧрдИ рджрд▓реАрд▓реЗрдВ рджреГрд╢реНрдп рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИрдВ - рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП std :: map рдХреЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЖрд░рдВрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рдХрд╛рд░реНрдп рдХрд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИред


рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ


рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рд╢реЗрд╖ рд╣реИ: рд╕реНрд╡рд┐рдЪ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ , рдФрд░ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдпрд╣реА рд╣реИ, рдпрд╣ рд╕рдм рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, C ++ рдорд╛рдирдХ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рднреА рдЬрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕рд▓рд┐рдП, "рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛" рдХрд╛ рдХрд╛рд░реНрдп рд╕рдВрдХрд▓рди-рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред C ++ 03 рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ CRC рдЧрдгрдирд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди C ++ 11 рдореЗрдВ, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдзрд┐рдХ рд╕рдордЭрджрд╛рд░ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рднреА рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЪрд╛рд░ рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ " рд╕рдВрдХрд▓рди <рд╕рдВрдХрд▓рд┐рдд рд╕рдордп рдореЗрдВ рдЬреНрдЮрд╛рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ " рд╣реИред рдЪрд▓реЛ рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ "рдкрддрд┐рдд" рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ * рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рдиред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣рд╛рдБ рдкрд╣рд▓реА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИ:

  constexpr unsigned char str_len(const char* const str) { return *str ? (1 + str_len(str + 1)) : 0; } std::cout << (int) str_len("qwerty") << " " << (int) str_len("") << std::endl; //  

рд╕рдВрдХрд▓рдХ рдХрд╕рдо рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╡рд╣ рдореЗрд░реЗ рд▓рд┐рдП "6 6" рдирд╣реАрдВ рд▓рд╛ рдкрд╛рдИ, рд▓реЗрдХрд┐рди "6 12"ред рдРрд╕рд╛ рдХреНрдпреЛрдВ? рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ "рд▓рд┐рдирдХреНрд╕" рдореЗрдВ рдпреВрдЯреАрдПрдл -8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рддрд╣рдд рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдорд╛рдирдХ рд╡рд┐рди -1251 рдореЗрдВ рдирд╣реАрдВ - рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ "рд╕рд┐рд░рд┐рд▓рд┐рдХ" рдЪрд░рд┐рддреНрд░ рдХреЛ рджреЛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм, рдпрджрд┐ рдЖрдк рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдорд╛рдирдХ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ "6 6" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛? рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрд╢ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрд╢ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ ...


рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ


рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕рд┐рд░рд┐рд▓рд┐рдХ рдпрд╛ рдПрд╢рд┐рдпрд╛рдИ рдкрд╛рддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЗрд╡рд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рдЕрдХреНрд╖рд░ рдФрд░ рдорд╛рдирдХ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ - рдЕрд░реНрдерд╛рддреН, рд╡реЗ рдЕрдХреНрд╖рд░ рдЬреЛ ASCII рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ 0 рд╕реЗ 127 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдмрджрд▓рддреЗ рд╕рдордп рдЙрдирдХреЗ рдЪрд╛рд░ рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗ - рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдмрдирд╛ рд╣реИрд╢ рд╣рдореЗрд╢рд╛ рдПрдХ рдЬреИрд╕рд╛ рд░рд╣реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЧрд▓рддреА рд╕реЗ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкрд╛рддреНрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рдЬрд╛рдП? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХрд▓рди-рд╕рдордп рд╕рдорд╛рд░реЛрд╣ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ:

  constexpr bool str_is_correct(const char* const str) { return (static_cast<signed char>(*str) > 0) ? str_is_correct(str + 1) : (*str ? false : true); } 

рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдЬреНрдЮрд╛рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ 0-127 рдХреА рд╕реАрдорд╛ рддрдХ рдХреЗ рд╣реА рдЕрдХреНрд╖рд░ рд╣реИрдВ, рдФрд░ рдпрджрд┐ "рдирд┐рд╖рд┐рджреНрдз" рд╡рд░реНрдг рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрд░ рдХрд▓рд╛рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реА ++ рдорд╛рдирдХ рдореЗрдВ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ - рдпрд╣ рдпрд╛ рддреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдпрд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рд╣рдореЗрд╢рд╛ 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ-рдПрдХ рдХрд░рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, CASE рдореИрдХреНрд░реЛ рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  #define CASE(str) static_assert(str_is_correct(str), "CASE string contains wrong characters");\ case str_hash(...) 

рдпрд╣рд╛рдБ C ++ 11 рдХреА рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╕рдВрдХрд▓рди рдкрд░ рдореБрдЦрд░ред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ CASE рдореИрдХреНрд░реЛ рдХреЗ рддрд░реНрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ "рдирд┐рд╖рд┐рджреНрдз" рд╡рд░реНрдг рд╣реИ, рддреЛ рд╕рдВрдХрд▓рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдПрдХ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ str_hash () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ред


рд╣реИрд╢ рдЧрдгрдирд╛ рдкрд░ рд╡рд╛рдкрд╕


рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рдЯрдХрд░рд╛рд╡ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрджрд┐ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╣реИрд╢ рдореЗрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрд╡рд┐рдЪ рд╕реЗ рдЭреВрдареЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ- рдкреЗрдбрд╝ред рдФрд░ рдЙрдкрдЧреНрд░рд╣ рдорд╣рд╛рд╕рд╛рдЧрд░ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ ... рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдЯрдХрд░рд╛рд╡ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рднреА рд╡рд░реНрдг 0-127 рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛: рдЫрд╡рд┐ ред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  typedef unsigned char uchar; typedef unsigned long long ullong; constexpr ullong str_hash(const char* const str, const uchar current_len) { return *str ? (raise_128_to(current_len - 1) * static_cast<uchar>(*str) + str_hash(str + 1, current_len - 1)) : 0; } 

рдпрд╣рд╛рдВ, рдЙрда_128_to () рдПрдХ рд╢рдХреНрддрд┐ рдХреЛ 128 рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд╕рдВрдХрд▓рди-рд╕рдордп рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ current_len рд╡рд░реНрддрдорд╛рди рд░реЗрдЦрд╛ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИред рдмреЗрд╢рдХ, рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рди рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛ - рдЗрд╕реЗ str_hash () рдХреА рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рдЧрд┐рдирдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрдзрд┐рдХрддрдо рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рдХреЛрдИ рдЯрдХреНрдХрд░ рдирд╣реАрдВ рд╣реИ? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреЗрд╡рд▓ рддрдм рдЬрдм рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ (рдпрд╣ рднреА рдЕрдВрдд рдореЗрдВ рд╕реА ++ 11 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрджрд┐ рдпрд╣ 2 64 -1 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ 9 рд╣реЛрдЧреА (рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ MAX_LEN рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ)ред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд╣реИрд╢ рдорд╛рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ 2 63 рд╣реЛрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдХреЛрдб 127 (рдФрд░ ASCII рдореЗрдВ рдЕрдкрдардиреАрдп рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП CASE рдХреЗ рддрд╣рдд рд╣рдо рдЕрднреА рднреА рдЗрд╕реЗ рдбреНрд░рд╛рдЗрд╡ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ CASE рдХреЗ рддрд╣рдд 10 рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦрдбрд╝рд╛ рд╣реЛ? рдпрджрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, static_assert рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

  #define CASE(str) static_assert(str_is_correct(str) && (str_len(str) <= MAX_LEN),\ "CASE string contains wrong characters, or its length is greater than 9");\ case str_hash(str, str_len(str)) 


рд╣рдо рдкрд░рд┐рд╖реНрдХрд░рдг рд╕реНрдкрд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВ


рд╕рднреА рдорд╛рдорд▓реЗ рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЧрдПред рдпрд╣ рдпрд╛ рддреЛ рд╣рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛ рдпрд╛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрд╢ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдВ, SWITCH рдореИрдХреНрд░реЛ рдореЗрдВ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдФрд░ рдпрджрд┐ рдЗрд╕рдХреЗ рддрд░реНрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ 9 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдгреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рд╣реЛрдЧреА, рддреЛ рд╣рдо 2 64 -1 рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реИрдВ (рд╣рдо рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ N_HASH рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ)ред рддреЛ:

  #define SWITCH(str) switch(str_hash_for_switch(str)) const ullong N_HASH = static_cast<ullong>(-1); //    std::string::npos inline ullong str_hash_for_switch(const char* const str) { return (str_is_correct(str) && (str_len(str) <= MAX_LEN)) ? str_hash(str, str_len(str)) : N_HASH; } 

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд░рдирдЯрд╛рдЗрдо рдореЗрдВ, SWITCH рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ рдпрджрд┐ CASE рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╣реА рд╣реИрд╢ рд╣реИ, рддреЛ рдирд┐рд╖реНрдкрд╛рджрди рдЙрд╕ рдкрд░ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ CASE рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐ рдореЗрдВ "рдирд┐рд╖рд┐рджреНрдз" рд╡рд░реНрдг рд╣реИрдВ, рдпрд╛ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ 9 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рд▓реЛрдб рдирд╣реАрдВ рд╣реИ (SWITCH рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рд╣реИрд╢ рдЧрдгрдирд╛ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде), рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ st_hash_for_switch () std :: string рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реА рд░рд╣рддрд╛ рд╣реИред

рдЕрдВрддрд┐рдо рд╕реНрд░реЛрдд рдПрдЪ-рдлрд╝рд╛рдЗрд▓ рдЧрд┐рддреБрдм рдкрд░ рд╣реИ ред рдпрд╣ C ++ 11 рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред "рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдБ рднреА рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, str_switch.h рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдФрд░ рдпрд╣ - SWITCH, CASE рдФрд░ DEFAULT рдореИрдХреНрд░реЛрдЬрд╝ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рд╣реИрдВред CASE (9 рд╡рд░реНрдг) рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рд╕реАрдорд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ - рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ;)

рдкреБрдирд╢реНрдЪ рдЕрджреНрдпрддрди: рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЧрд▓рддрд┐рдпрд╛рдБ рдкрд╛рдИ рдЧрдИрдВ - рдЗрд╕рд▓рд┐рдП рдЕрдм рдпрд╣ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ - рдмреЗрд╢рдХ, рд╣рд░ рдХреЛрдИ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In166201/


All Articles