рдпрджрд┐ рдирд╛рдЯрдХ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реА ++ рдХреЛрдб рджреАрд╡рд╛рд░ рдкрд░ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдЕрдВрдд рддрдХ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдорд╛рд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдмрдЬрд░рдиреЗ рд╕реНрдЯреНрд░реЙрд╕реНрдЯреНрд░реБрдк
31 рдЕрдХреНрдЯреВрдмрд░ рд╕реЗ 1 рдирд╡рдВрдмрд░ рддрдХ, рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдиреЗ C ++ Russia Piter рд╕рдореНрдореЗрд▓рди рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреА, рд░реВрд╕ рдореЗрдВ JUG Ru рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рдд рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХред рдЖрдордВрддреНрд░рд┐рдд рд╡рдХреНрддрд╛рдУрдВ рдореЗрдВ C ++ рдорд╛рдирдХреАрдХрд░рдг рд╕рдорд┐рддрд┐ рдХреЗ рд╕рджрд╕реНрдп, CppCon рдХреЗ рд╕рд╛рде рд╡рдХреНрддрд╛рдУрдВ, O'Reilly рджреНрд╡рд╛рд░рд╛ рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд▓реЗрдЦрдХ, рд╕рд╛рде рд╣реА LLVM, libc ++ рдФрд░ Boost рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рдореНрдореЗрд▓рди рдЕрдиреБрднрд╡реА рд╕реА ++ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИ рдЬреЛ рд▓рд╛рдЗрд╡ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди рдореЗрдВ рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдФрд░ рд╡рд┐рдирд┐рдордп рдЕрдиреБрднрд╡ рдХреЛ рдЧрд╣рд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЫрд╛рддреНрд░реЛрдВ, рд╕реНрдирд╛рддрдХ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдкреНрд░реЛрдлреЗрд╕рд░реЛрдВ рдХреЛ рдмрд╣реБрдд рд╕реБрдЦрдж рдЫреВрдЯ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред
рд╕рдореНрдореЗрд▓рди рдХрд╛ рдореЙрд╕реНрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдЧрд▓реЗ рд╕рд╛рд▓ рдЕрдкреНрд░реИрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рдЫрд╛рддреНрд░ рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдЖрдЦрд┐рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЗрдВ рд╕реАрдЦреАрдВред
рд╕рдореНрдореЗрд▓рди рдПрд▓реНрдмрдо рд╕реЗ рдлреЛрдЯреЛрд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╣рд╛рдпрд░ рд╕реНрдХреВрд▓ рдСрдл рдЗрдХреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЗ рджреЛ рдЫрд╛рддреНрд░ - рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ, рдиреЗ рдЗрд╕ рдкрдж рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛:
- рд▓рд┐рд╕рд╛ рд╡рд╛рд╕рд┐рд▓реЗрдВрдХреЛ рдПрдХ 4 рд╡реАрдВ рд╡рд░реНрд╖ рдХреА рд╕реНрдирд╛рддрдХ рдХреА рдЫрд╛рддреНрд░рд╛ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо "рдПрдкреНрд▓рд╛рдЗрдб рдореИрдердореЗрдЯрд┐рдХреНрд╕ рдПрдВрдб рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд╛рдЗрдВрд╕" рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ" рдХреА рджрд┐рд╢рд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд░рд╣реА рд╣реИред рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдкрд╣рд▓реЗ рд╡рд░реНрд╖ рдореЗрдВ рд╕реА ++ рднрд╛рд╖рд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд, рдмрд╛рдж рдореЗрдВ рдЙрджреНрдпреЛрдЧ рдореЗрдВ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреБрдиреВрди рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдиреЗ рд╕рдореНрдореЗрд▓рди рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреА рдкрд╕рдВрдж рдкрд░ рдЕрдкрдиреА рдЫрд╛рдк рдЫреЛрдбрд╝реАред
- Danya Smirnov рдорд╛рд╕реНрдЯрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо "рдбреЗрдЯрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг" рдХрд╛ рдкреНрд░рдердо рд╡рд░реНрд╖ рдХрд╛ рдЫрд╛рддреНрд░ рд╣реИред рд╕реНрдХреВрд▓ рдореЗрдВ рд░рд╣рддреЗ рд╣реБрдП, рдЙрдиреНрд╣реЛрдВрдиреЗ C ++ рдореЗрдВ рдУрд▓рдВрдкрд┐рдпрд╛рдб рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд▓рд┐рдЦреАрдВ, рдФрд░ рдлрд┐рд░ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╣реБрдЖ рдХрд┐ рднрд╛рд╖рд╛ рд▓рдЧрд╛рддрд╛рд░ рд╢реИрдХреНрд╖рд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдмрди рдЧрдпрд╛ред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдореНрдореЗрд▓рди рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╕рд╛рде рд╣реА рдирдП рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдирд╛ред
рд╕рдорд╛рдЪрд╛рд░ рдкрддреНрд░ рдореЗрдВ, рд╕рдВрдХрд╛рдп рдиреЗрддрд╛ рдЕрдХреНрд╕рд░ рд╣рдорд╛рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╢реИрдХреНрд╖рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рддрдВрдмрд░ рдореЗрдВ, рд╣рдордиреЗ рд╕реА ++ рд░реВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреА рдФрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХрд╛ рдпрд╣ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд╣реИред
рд╕рдореНрдореЗрд▓рди рдХреА рд╕рдВрд░рдЪрдирд╛
рджреЛ рджрд┐рдиреЛрдВ рдХреЗ рджреМрд░рд╛рди, рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдиреЗ рдХрдИ рдЧрд░реНрдо рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рддреЗ рд╣реБрдП 30 рд░рд┐рдкреЛрд░реНрдЯ рдкрдврд╝реАрдВ: рд▓рд╛рдЧреВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдордЬрд╛рдХрд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдирдП рдорд╛рдирдХ рдХреЗ рдХрд╛рд░рдг рдЖрдЧрд╛рдореА рднрд╛рд╖рд╛ рдЕрдкрдбреЗрдЯ, рд╕реА ++ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╕рд╛рд╡рдзрд╛рдирд┐рдпреЛрдВ рдореЗрдВ рд╕рдордЭреМрддрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгред рд╕рд╛рде рд╣реА рд╕рд╛рде рднрд╛рд╖рд╛ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдХреБрдЫ рдЗрдВрдЬрди рднрд╛рдЧреЛрдВред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, 3 рдкреНрд░рджрд░реНрд╢рди рд╣реБрдП, рдЬреНрдпрд╛рджрд╛рддрд░ рд░реВрд╕реА рдореЗрдВ рджреЛ рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрдХред
рдЪрд░реНрдЪрд╛ рдХреНрд╖реЗрддреНрд░
рднрд╛рд╖рдг рдХреЗ рдмрд╛рдж, рд╕рднреА рдЕрдиреБрддреНрддрд░рд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдЕрдзреВрд░реА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ рдорд╛рд░реНрдХрд░ рдмреЛрд░реНрдбреЛрдВ рд╕реЗ рд▓реИрд╕ рд╡рдХреНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рд╕рдВрдЪрд╛рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдПрдХ рд╕реБрдЦрдж рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рдиреЛрдВ рдХреЗ рдмреАрдЪ рдмреНрд░реЗрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ред
рдмрд┐рдЬрд▓реА рд╡рд╛рд░реНрддрд╛ рдФрд░ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдЪрд░реНрдЪрд╛
рдпрджрд┐ рдЖрдк рдПрдХ рдЫреЛрдЯреА рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдорд╛рд░реНрдХрд░ рдмреЛрд░реНрдб рдкрд░ рдПрдХ рд╢рд╛рдо рдХреА рд▓рд╛рдЗрдЯрдирд┐рдВрдЧ рдЯреЙрдХ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдореНрдореЗрд▓рди рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рднреА рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдВрдЪ рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C ++ рдХреЗ рд▓рд┐рдП рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░ рдХрд╛ рддреНрд╡рд░рд┐рдд рдкрд░рд┐рдЪрдп (рдЬреЛ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реЛ рдЧрдпрд╛) рдпрд╛ рдПрдХ рд╕рд╛рдЗрдирд╕реЙрдЗрдб рдХреА рдкреАрдврд╝реА рдореЗрдВ рдмрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреА рдЬреЛ рдЖрдк рдХреЗрд╡рд▓ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рджреЗрдЦ рдирд╣реАрдВ рд╕рдХрддреЗред
рдПрдХ рдЕрдиреНрдп рдкреНрд░рд╛рд░реВрдк рдкреИрдирд▓ рдЪрд░реНрдЪрд╛ "рдЖрддреНрдорд╛ рд╕рдорд┐рддрд┐ рдХреЗ рд╕рд╛рде" рд╣реИред рдордВрдЪ рдкрд░ рдорд╛рдирдХреАрдХрд░рдг рд╕рдорд┐рддрд┐ рдХреЗ рдХреБрдЫ рд╕рджрд╕реНрдп рд╣реИрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдкрд░ рдПрдХ рдЪрд┐рдордиреА рд╣реИ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ - рдПрдХ рднрд╛рд╡рдкреВрд░реНрдг рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХрд╛рд░рдг "рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдЪреАрдЬ рдкрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ" рдордЬреЗрджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ), рд╕рд╡рд╛рд▓ C ++ рдХреЗ рдорд╛рдирдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ, рдмрд┐рдирд╛ рдЧрд░реНрдо рддрдХрдиреАрдХреА рдЪрд░реНрдЪрд╛ рдФрд░ рд╣реЛрд▓реАрд╡рд░ рдХреЗред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЬреАрд╡рд┐рдд рд▓реЛрдЧ рднреА рд╕рдорд┐рддрд┐ рдореЗрдВ рдмреИрдарддреЗ рд╣реИрдВ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рд╣реЛрд▓реАрд╡рд░ рдХреЗ рдкреНрд░рддрд┐ рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рддреАрд╕рд░реА рдШрдЯрдирд╛ рдмрдиреА рд░рд╣реА - рдмреАрдУрдПрдл рд╕рддреНрд░ "рд╕реА ++ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдУ"ред рд╣рдо рдПрдХ рдЧреЛ рдкреНрд░реЗрдореА, рдПрдХ рд╕реА ++ рдкреНрд░реЗрдореА рд▓реЗрддреЗ рд╣реИрдВ, рд╕рддреНрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рдПрдХ рд╕рд╛рде рд╡рд┐рд╖рдп рдкрд░ 100500 рд╕реНрд▓рд╛рдЗрдб рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рд╕реА ++ рдореЗрдВ рдкреИрдХреЗрдЬ рдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╛ рдЧреЛ рдореЗрдВ рдЬреЗрдирд░рд┐рдХ рдХреА рдХрдореА), рдФрд░ рдлрд┐рд░ рд╡реЗ рдЖрдкрд╕ рдореЗрдВ рдФрд░ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рдмреАрдЪ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджрд░реНрд╢рдХ рдПрдХ рд╕рд╛рде рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред ред рдпрджрд┐ рд╣реЛрд▓реАрд╡рд░ рд╡реНрдпрд╡рд╕рд╛рдп рдкрд░ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдордзреНрдпрд╕реНрде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдореЗрдЯ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╛рд░реВрдк рдирд╢реЗ рдХреА рд▓рдд рд╣реИ: рд╢реБрд░реБрдЖрдд рдХреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдмрд╛рдж, рд╕реНрд▓рд╛рдЗрдб рдХреЗ рдХреЗрд╡рд▓ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдВрдд рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд▓рд╛рдИ рдЬрд╛рдиреА рдереАред
рдкрд╛рд░реНрдЯрдирд░реНрд╕ рдЦрдбрд╝рд╛ рд╣реИ
рд╕рдореНрдореЗрд▓рди рдХреЗ рднрд╛рдЧреАрджрд╛рд░реЛрдВ рдХреЛ рд╣реЙрд▓ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрдЯреИрдВрдб рдкрд░ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдФрд░ рд░реЛрдЬрдЧрд╛рд░ рдХреА рдкреЗрд╢рдХрд╢ рдХреА, рдХреНрд╡рд┐рдЬрд╝ рдФрд░ рдЫреЛрдЯреА рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛, рдФрд░ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╕реНрдХрд╛рд░ рднреА рдЦреЗрд▓реЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдХрдВрдкрдирд┐рдпреЛрдВ рдиреЗ рднреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреА, рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рди рдХреЗрд╡рд▓ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдП рдереЗред
рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХрд╛ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг
рд╣рдордиреЗ рджреЛрдиреЛрдВ рджрд┐рдиреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рд╕реБрдиреАред рдХрднреА-рдХрднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдЪреБрдирдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛ - рд╣рдо рд╡рд┐рд░рд╛рдо рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдФрд░ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реБрдПред рдФрд░ рдлрд┐рд░ рднреА, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдХреБрдЫ рдЦреЛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдХреБрдЫ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреАрдВ
рд╕рдВрдХрд▓рдХ рдЕрдиреБрдХреВрд▓рди, рдкреНрд░рд┐рдВрд╕реЗрд╕ рд░реБрд╕рд╡рд╛рдИрд╡ рдХреЗ рдкреНрд░рд┐рдЬреНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ C ++ рдореЗрдВ рдЕрдкрд╡рд╛рдж
рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реНрд▓рд╛рдЗрдбрдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд░реЛрдорди рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ LLVM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рджрд┐рдЦреЗред рдЗрд╕реА рд╕рдордп, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдХреНрд▓реИрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд░рд┐рдкреЛрд░реНрдЯ рдЕрднреА рднреА рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рджреЗ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрдИ рд╕рдлрд▓ рд╕рдорд╛рдзрд╛рди рдореЗрд▓ рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛрдб (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрддрд░ рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░реЗрдВ рдФрд░ рд╕реНрдЯреИрдХ рдХреЛ рдЙрдЪреНрдЪрддрд░ рдЦреЛрд▓ рджреЗрдВред рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рд╕рдВрднрд╛рд╡рд┐рдд рдлреЗрдВрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрднреА рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рдХрд┐рд╕реА рддрд░рд╣ рдУрд╡рд░рд╣реЗрдб рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдЖрдВрдХрдбрд╝реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЖрдк "рдЕрдирд╛рд╡рд╢реНрдпрдХ" рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдкреАрдХрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рджрд░реНрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╣рд╛рдВ рдпреЗ рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд░реЛрдорди рд░реВрд╕ рдиреЗ рджрд░реНрд╢рдХреЛрдВ рдХреЛ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рджрд┐рдпрд╛ рдХрд┐ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреБрдХреНрддрд┐рдпрд╛рдВ рджреЗрддрд╛ рд╣реИ:
- рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ, рдпрд╣ noexcept (рдФрд░ const) рд╕рдВрд╢реЛрдзрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рддрд╛рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХреЗред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрдкреАрдХрд░ рдиреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдХрд┐ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреНрдпреВрдирддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд░рд┐рдкреЛрд░реНрдЯ рдХреА рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
["C ++ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╢рди рдХреЗ рдЪрд╢реНрдореЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрд╡рд╛рдж"]рдЬрдирдХ, рдХреЛрд░рдЯрд╛рдЗрди рдФрд░ рдЕрдиреНрдп рдорд╕реНрддрд┐рд╖реНрдХ-рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдорд┐рдард╛рд╕, рдЖрджрд┐ рд╢реИрд╡
рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реНрд▓рд╛рдЗрдбC ++ 20 рдХреЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдЗрд╕ рд╕рдореНрдореЗрд▓рди рдХреА рдХрдИ рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рди рдХреЗрд╡рд▓ рд░рдВрдЧреАрди рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд▓реНрдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рддрд░реНрдХ (, рдХреЙрд▓рдмреИрдХ) рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдкрджрдирд╛рдо рджреНрд╡рд╛рд░рд╛ рднреА рдпрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
Adi Shavit рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рддрд╛ рд╣реИ: рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ (рдпрд╛ рдХреЙрд▓рдмреИрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рджреЗрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдкреНрд░рд┐рдп рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ рдХрд┐ рдХреЙрд▓рдмреИрдХ рдирд░реНрдХ)ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ: рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдФрд░ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИрдВ (рд╢реБрд░реВ тЖТ рдЕрдВрдд рдмрдирд╛рдо rbegin тЖТ рдкреНрд░рддрд┐рдкрд╛рджрди рдФрд░ рдЗрддрдиреЗ рдкрд░), рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ рдХреИрд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░реЗрдВрдЧреЗ? C ++ 20 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ!
рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк: рдкрд░реНрд╡рддрдорд╛рд▓рд╛ред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЖрд╡рд░рдг рдХреЗ рдХрд╛рд░рдг, рд╣рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд░рдЪрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рднреАред рдпрд╣ рд╕рдм рдкреВрд░реНрдг рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ: рдЧрдгрдирд╛ рдХреЗ рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдЬреЛ рдзрд╛рд░рдгрд╛ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реНрд▓рд╛рдЗрдбрдЦреИрд░, рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдХреЛрд░ ++ рдХреЛ C ++ 20 (рдХрд╛рд░реНрдп рдЬрд┐рд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд╛рдпрдерди рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ: рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреБрдЫ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рди рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреЛрд░рдЖрдЙрдЯ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рддрд░реНрдХ рднреА рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдорд░рд╣рдо рдореЗрдВ рдПрдХ рдордХреНрдЦреА рд╣реИ: рдлрд┐рд▓рд╣рд╛рд▓ рд╡реЗ рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рд╡реЗ рднреА рдЙрддрдиреЗ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрд░рдЯрд╛рдЗрди рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрд░рдЯрд╛рдЗрди рдФрд░ рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ / рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рднреА рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдХреА рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдХреЙрд░рдЯрд╛рдЗрдиреНрд╕ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рд╛рдордЧреНрд░реА:
рд╕реА ++ рдЯреНрд░рд┐рдХреНрд╕ рдпреИрдВрдбреЗрдХреНрд╕ рд╕реЗред рдЯреЗрдХреНрд╕реА, рдПрдВрдЯреЛрди рдкреЛрд▓реБрдЦрд┐рди
рдЙрдирдХреА рдкреЗрд╢реЗрд╡рд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ, рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдпрдХ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ: рдЖрдВрддрд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдХреБрдЫ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рдмреАрдЪ рдПрдХ рдЖрд╡рд░рдг, рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЗрди рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рдиреЗрдЯ рдореЗрдВ рдХреБрдЫ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдХреЗрд▓реЗ рд▓реЙрдЧ рдХреЗ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдЯреЗрд░рд╛рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛! рдлрд┐рд░ рд╣рд░ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЪрд╛рд▓реЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ - рдПрдВрдЯреЛрди рдкреЛрд▓реБрдЦрд┐рди рдиреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред
рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рдкреЙрдЗрдВрдЯрд░-рдЯреВ-рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди (рдкрд┐рдореНрдкрд▓) рдкреИрдЯрд░реНрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдерд╛ред
#include <third_party/json.hpp> //PROBLEMS! struct Value { Value() = default; Value(Value&& other) = default; Value& operator=(Value&& other) = default; ~Value() = default; std::size_t Size() const { return data_.size(); } private: third_party::Json data_; };
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд╣рд▓реЗ рдЖрдк рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдпрд╣ рддреЗрдЬреА рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдирд╛рдо рд╕рдВрдШрд░реНрд╖реЛрдВ рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, .Cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ #include рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ: рдЖрдкрдХреЛ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рдПрдкреАрдЖрдИ рдХреА рдЕрдЧреНрд░реЗрд╖рдг-рдШреЛрд╖рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА std :: unique_ptrред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрди рдФрд░ рдЕрдиреНрдп рдЕрдкреНрд░рд┐рдп рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдвреЗрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдЧрд╛рд░рдВрдЯреА рдХрдо рд╣реЛ рдЧрдИ рд╣реИред рдЗрд╕ рд╕рдм рдХреЗ рд╕рд╛рде, std :: align_storage рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
struct Value {
рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛: рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ рдФрд░ рд╕рдВрд░реЗрдЦрдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╣рдо рдЕрдкрдиреЗ pimpl рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ <T, SizeT, AlignmentT> рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдВрдЧреЗ, рдХреБрдЫ рдордирдорд╛рдиреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рд╕рдм рдХреБрдЫ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реИ:
~FastPimpl() noexcept { validate<sizeof(T), alignof(T)>(); Ptr()->~T(); } template <std::size_t ActualSize, std::size_t ActualAlignment> static void validate() noexcept { static_assert( Size == ActualSize, "Size and sizeof(T) mismatch" ); static_assert( Alignment == ActualAlignment, "Alignment and alignof(T) mismatch" ); }
рдЪреВрдВрдХрд┐ рдЯреА рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЛрдб рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдбрд┐рд╕рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдФрд░ рд╕рдВрд░реЗрдЦрдг рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдВрдХрд▓рди рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢реБрд░реБрдЖрдд рдХреА рдХреАрдордд рдкрд░, рд╣рдо рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ .cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдкреАрдЖрдИ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдбрд┐рдЬрд╝рд╛рдЗрди рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрдо рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд░рд┐рдкреЛрд░реНрдЯ рдХреА рд╕реНрд▓рд╛рдЗрдбреНрд╕ рд▓рд┐рдВрдХ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
["C ++ рдЯреИрдХреНрд╕реА рдЯреНрд░рд┐рдХреНрд╕"]рдЕрдкрдирд╛ рдХреЛрдб DRY, Bj├╢rn Fahller рд░рдЦрдиреЗ рдХреА рдЖрдзреБрдирд┐рдХ рддрдХрдиреАрдХ
рдЗрд╕ рдмрд╛рддрдЪреАрдд рдореЗрдВ, рдмреНрдпреЛрд░реНрди рдлреЗрд╣рд▓рд░ рдиреЗ рд╢реИрд▓реАрдЧрдд рдЦрд╛рдорд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рджрд┐рдЦрд╛рдП рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рджреЛрд╣рд░рд╛рдпрд╛ рд╕рд╢рд░реНрдд рдЬрд╛рдБрдЪ:
assert(a == IDLE || a == CONNECTED || a == DISCONNECTED);
рдХреНрдпрд╛ рд╡рд╣ рдкрд░рд┐рдЪрд┐рдд рд╣реИ? рд╣рд╛рд▓ рдХреЗ рдорд╛рдирдХреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдХрдИ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕реА ++ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдереЛрдбрд╝реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЗрдирд╛рдпрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
assert(a == any_of(IDLE, CONNECTED, DISCONNECTED));
рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреЗрдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддреБрд░рдВрдд рд╡реИрд░реЗрдбрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдлреЛрд▓реНрдб рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рддрддреНрд╡ enum'a state_type рдХреЛ рдХрдИ рдЪрд░ рдХреА рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ is_any_of рд╕рд╣рд╛рдпрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦрдирд╛ рд╣реИ:
enum state_type { IDLE, CONNECTED, DISCONNECTED }; template <typename ... Ts> bool is_any_of(state_type s, const Ts& ... ts) { return ((s == ts) || ...); }
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред рдЕрдм рддрдХ, рдХреЛрдб рдкрдардиреАрдп рдирд╣реАрдВ рдмрди рд░рд╣рд╛ рд╣реИ:
assert(is_any_of(state, IDLE, DISCONNECTING, DISCONNECTED));
рдЧреИрд░-рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдЙрдирдХреА рдорджрдж рд╕реЗ, рд╣рдо рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рдПрдирдо рддрддреНрд╡реЛрдВ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
template <state_type ... states> bool is_any_of(state_type t) { return ((t == states) | ...); } assert(is_any_of<IDLE, DISCONNECTING, DISCONNECTED>(state));
рдПрдХ рдЧреИрд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ (C ++ 17) рдореЗрдВ рдСрдЯреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп_ рддрддреНрд╡ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд┐ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреИрд░-рдкреНрд░рдХрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдирдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
template <auto ... alternatives, typename T> bool is_any_of(const T& t) { return ((t == alternatives) | ...); }
рдЗрди рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рд╕рд░рд╕рд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
template <class ... Ts> struct any_of : private std::tuple<Ts ...> {
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрдЯреМрддреА рдЧрд╛рдЗрдб рд╡рд╛рдВрдЫрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрд░рдЪрдирд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рддрд░реНрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд╛рдирддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдмреНрдпреЛрд░реНрди == рдХреЗ рдЕрд▓рд╛рд╡рд╛ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдордирдорд╛рдирд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдПред рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде, no_unique_address рд╡рд┐рд╢реЗрд╖рддрд╛ (C ++ 20) рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ (C ++ 20) рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред (рд╣рд╛рдВ, рдЕрдм рд▓рдВрдмреЛрджрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИ - рдпреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд╛рд░ рдмреНрд░реИрдХреЗрдЯреНрд╕ рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рдЬреЛрдбрд╝реЗ рд╣реИрдВред) рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рднрд╛рдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рдЖрддреНрдорд╛ рдХреЛ рдЧрд░реНрдо рдХрд░рддрд╛ рд╣реИ, рд▓реИрдореНрдмреНрдбрд╛ рдХреИрд▓рдХреБрд▓рд╕ рдХреА рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкрд░рдВрдкрд░рд╛рдУрдВ рдореЗрдВ рддреБрдЪреНрдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдирд╛ред
рдЕрдВрдд рдореЗрдВ, рдЧреНрд▓реЙрд╕ рд▓рдЧрд╛рдирд╛ рди рднреВрд▓реЗрдВ:
- рд╕реНрдорд░рдг рдХрд░реЛ рдХрд┐ рд▓рдВрдмреЛрджрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд╢ рд╣реИрдВ;
- рдкрд░рдлреЗрдХреНрдЯ рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рдмрджрд╕реВрд░рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рджреЗрдЦреЗрдВ;
- рдЪрд▓реЛ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕рд╢рд░реНрдд noexcept рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рджреЗрддреЗ рд╣реИрдВ;
- рд╣рдо рд▓рдВрдмреЛрджрд░ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░рд┐рдЯрд░реНрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреЗ рд╣реИрдВред рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдзрд┐рдХ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ - рдЯрд╛рдЗрдк рдЬрд╛рдБрдЪ рдХреЗ рдЪрд░рдг рдореЗрдВред
рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╛рдЦреНрдпрд╛рди рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ:
рд╣рдорд╛рд░реЗ рдЫрд╛рдкреЛрдВ
C ++ Russia рдореЗрдВ рд╣рдорд╛рд░реА рдкрд╣рд▓реА рднрд╛рдЧреАрджрд╛рд░реА рдХреЛ рдЗрд╕рдХреА рд╕рдореГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдПрдХ рднрд╛рд╡рдирд╛рддреНрдордХ рдШрдЯрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реА ++ рд░реВрд╕ рдХреА рдЫрд╛рдк рдереА, рдЬрд╣рд╛рдВ рд╕реАрдЦрдиреЗ рдФрд░ рд▓рд╛рдЗрд╡ рд╕рдВрдЪрд╛рд░ рдХреЗ рдмреАрдЪ рдХреА рд░реЗрдЦрд╛ рд▓рдЧрднрдЧ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рдШрдЯрдирд╛ рдХреЗ рднрд╛рдЧреАрджрд╛рд░реЛрдВ рд╕реЗ рд╡рдХреНрддрд╛рдУрдВ рдХреЗ рдореВрдб рд╕реЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рддрдХ, рд╕рдм рдХреБрдЫ, рдЧрд░реНрдо рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рд╣реИред рд╕рдореНрдореЗрд▓рди рдХреА рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдореЗрдВ C ++ рдирд╡рд╛рдЪрд╛рд░реЛрдВ, рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╡реИрдЪрд╛рд░рд┐рдХ рд╡рд╛рд╕реНрддреБ рд╕рдВрдмрдВрдзреА рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕рд╣рд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд╕рд╛рдорд╛рдЬрд┐рдХ рдШрдЯрдХ рдХреЗ рдзреНрдпрд╛рди рдХреЛ рд╡рдВрдЪрд┐рдд рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реЛрдЧрд╛, рдЬреЛ рди рдХреЗрд╡рд▓ 10 ++ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рднрд╛рд╖рд╛ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрдпреЛрдЬрди рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рдореНрдореЗрд▓рди рдХреЗ рдЖрдпреЛрдЬрдХреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддреЗ рд╣реИрдВ!
рдЖрдк
JUG Ru рдмреНрд▓реЙрдЧ рдкрд░ C ++ Russia рдХреЗ рдЕрддреАрдд, рд╡рд░реНрддрдорд╛рди рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдпреЛрдЬрдХреЛрдВ рдХреА рдкреЛрд╕реНрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдШрдЯрдирд╛рдУрдВ рдХреА рд╣рдорд╛рд░реА рд░реАрдЯреЗрд▓рд┐рдВрдЧ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдИ!