рдирдорд╕реНрдХрд╛рд░ рд╕рд╛рдерд┐рдпреЛрдВ!
рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛, рд╣рдорд╛рд░рд╛ рдзреНрдпрд╛рди рдореИрдирд┐рдВрдЧ рдкрдмреНрд▓рд┐рд╢рд┐рдВрдЧ рд╣рд╛рдЙрд╕ рдХреА рдХрд┐рддрд╛рдм "рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдХреА
рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдерд╛, рдЬреЛ рдЙрдЪрд┐рдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдорд╣рддреНрд╡ рдФрд░ рд╕реНрд╡рдЪреНрдЫ рдФрд░ рдЯрд┐рдХрд╛рдК рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЗрд╕рдХреА рднреВрдорд┐рдХрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИред

рдЙрд╕реА рд╕рдордп, рд▓реЗрдЦрдХ рдХреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ, рд╣рдореЗрдВ рдкреБрд╕реНрддрдХ рдкрд░ рдХрд╛рдо рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ, рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрднрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реБрдП, рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ред рд╣рдо рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЗрдЦрдХ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рддрдиреЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдФрд░ рд╕рдВрднрд╡рддрдГ, рдкреВрд░реА рдкреБрд╕реНрддрдХ
рдордВрдЧрд▓ рдХреА рдЬрд▓рд╡рд╛рдпреБ рдкрд░рд┐рдХреНрд░рдорд╛ рдХрд░рддреА рд╣реИрдорд╛рд░реНрд╕ рдХреНрд▓рд╛рдЗрдореЗрдЯ рдСрд░реНрдмрд┐рдЯрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рди рд▓реИрдВрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рдФрд░ рдорд╛рд░реНрдЯрд┐рдпрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрд▓рдЧ рд╣реЛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓реЙрдХрд╣реАрдб рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдШрдЯрдХ рдиреЗ рдЧрддрд┐ рдХреЛ рдорд╣рддреНрд╡ рджрд┐рдпрд╛, рдкрд╛рдЙрдВрдб-рдмрд▓ рд╕реЗрдХрдВрдб рдореЗрдВ рдорд╛рдкрд╛ рдЧрдпрд╛, рдЬрдмрдХрд┐ рдирд╛рд╕рд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдЕрдиреНрдп рдШрдЯрдХ рдиреЗ рдиреНрдпреВрдореЙрди рдореЗрдВ рдЧрддрд┐ рдХрд╛ рдорд╛рди рд▓рд┐рдпрд╛- рд╕реЗрдХрдВрдбред
рдЖрдк рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдирд╛рд╕рд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдШрдЯрдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЖрдк рдпрд╣ рднреА рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЙрдХрд╣реАрдб рдШрдЯрдХ рдиреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╣рд╛ рд╣реИ:
void main() { trajectory_correction(1.5 ); }
рдкрд╛рдЙрдВрдб-рдлреЛрд░реНрд╕-рд╕реЗрдХрдВрдб (lbfs) рд▓рдЧрднрдЧ 4.448222 рдиреНрдпреВрдЯрди рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб (рдПрдирдПрд╕) рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд▓реЙрдХрд╣реАрдб рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ,
trajectory_correction
рд▓рд┐рдП 1.5 lbfs рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: 1.5 lbfs рд▓рдЧрднрдЧ 6.672333 рдПрдирдПрд╕, 2 рдПрдирдПрд╕ рдХреА рджрд╣рд▓реАрдЬ рдХреЗ рдКрдкрд░ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдбреЗрдЯрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИред рдирддреАрдЬрддрди, рдирд╛рд╕рд╛ рдШрдЯрдХ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд┐рдирд╛ рдПрдирдПрд╕ рдХреЗ рд╕рд╛рде lbfs рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧрд▓рддреА рд╕реЗ рдЗрдирдкреБрдЯ рдХреЛ lbfs рдХреЛ рдПрдирдПрд╕ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ 1.5 2 рд╕реЗ рдХрдо рд╣реИ, рдСрд░реНрдмрд┐рдЯрд░ рдврд╣ рдЧрдпрд╛ред рдпрд╣ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдПрдВрдЯреАрдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕реЗ рдЖрджрд┐рдо рдЬреБрдиреВрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рдЬреБрдиреВрдирдЬрдм рд╣рдо рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдбреЛрдореЗрди рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдкрд░ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рдг рд╕реНрд╡рдпрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЛрд╕реНрдЯрд▓ рдХреЛрдб, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдлреЛрди рдирдВрдмрд░, рдбрдмрд▓-рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдирдПрд╕ рдФрд░ рдПрд▓рдмреАрдПрдлрдПрд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдареАрдХ рдпрд╣реА рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ
Ns
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛:
struct Ns { double value; }; bool operator<(const Ns& a, const Ns& b) { return a.value < b.value; }
рдЗрд╕реА рддрд░рд╣, рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рдХрд╛рд░ рдХреА
lbfs
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
struct lbfs { double value; }; bool operator<(const lbfs& a, const lbfs& b) { return a.value < b.value; }
рдЕрдм рдЖрдк
trajectory_correction
рдПрдХ рдкреНрд░рдХрд╛рд░-рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ
lbfs
рд╕рд╛рде
lbfs
, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ, рддреЛ рдХреЛрдб рдХреЗрд╡рд▓ рдЕрд╕рдВрдЧрддрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
void main() { trajectory_correction(lbfs{ 1.5 }); }
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, (
2 /*Ns */, /* lbfs */
) рдЕрдм рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдХреЛрдб рдореЗрдВ рд╡реНрдпрдХреНрдд рдХреА рдЧрдИ рд╣реИ: (
Ns{ 2 }, lbfs{ 1.5 }
) ред
рдмреЗрд╢рдХ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ
lbfs
рдХреЛ
lbfs
рдХрдореА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
struct lbfs { double value; explicit operator Ns() { return value * 4.448222; } };
рдЗрд╕ рддрдХрдиреАрдХ рд╕реЗ рд▓реИрд╕, рдЖрдк рд╕реНрдереИрддрд┐рдХ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
trajectory_correction
рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ:
void main() { trajectory_correction(static_cast<Ns>(lbfs{ 1.5 })); }
рдпрд╣рд╛рдБ рдХреЛрдб рдХреА рд╢реБрджреНрдзрддрд╛ рдЧреБрдгрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдХрд╛рд╕реНрдЯ рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рд╕реНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдЧреАред рдПрдХ рдЕрдиреБрднрд╡рдЬрдиреНрдп рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдпрд╣рд╛рдВ рдкрд╛рдпрдерди рдХреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ
рдЗрд╕ рдХрд╣рд╛рдиреА рдХрд╛ рдиреИрддрд┐рдХ рдпрд╣ рд╣реИ рдХрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╣реА рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреЗрдХрд┐рдВрдЧ рддрдВрддреНрд░ рд╣реИрдВ, рдлрд┐рд░ рднреА рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЖ рдЬрд╛рддреА рд╣реИред
рд░рд╛рдЬреНрдп рдХрд╛ рд╕реНрдерд╛рдирдкрд░реЗрд╢рд╛рдиреА рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо
рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рдЙрдирдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрдХреАрд░реНрдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрднрд╡ рдорд╛рдиреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреВрд▓ рд╕реЗрдЯ
{true, false}
, рдЬрд╣рд╛рдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЪрд░ рдЗрди рджреЛ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣,
uint32_t
рд╕реЗрдЯ
{0 ...4294967295}
ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░ рд╕рднреА рдЬреАрд╡рд┐рдд рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рдХрд╛рд░
bool
рдХрд╛ рдПрдХ рдЪрд░ рдФрд░ рдкреНрд░рдХрд╛рд░
uint32_t
рдХрд╛ рдПрдХ рдЪрд░ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди
{true, false} X {0 ...4294967295}
ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдЪрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЪрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрди рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрдпреБрдХреНрдд рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
bool get_momentum(Ns& momentum) { if (!some_condition()) return false; momentum = Ns{ 3 }; return true; }
рдЙрдкрд░реНрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдПрдирдПрдПрд╕ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдпрджрд┐ рдорд╛рди рд╕рд╣реА рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣
false
ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдЕрдВрддрд░рд┐рдХреНрд╖
bool X Ns
рдХрд╛ рдПрдХ рдЙрддреНрдкрд╛рдж рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрд╡реЗрдЧ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░
Ns
рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ: рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди
false
, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрд╡реЗрдЧ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рддрд░реАрдХрд╛ рдпрд╛ рджреВрд╕рд░рд╛, рдЧрддрд┐ рдПрдирдПрд╕ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдорд╛рдиреНрдп рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИред рдЕрдХреНрд╕рд░ рдРрд╕реЗ рдХреАрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрдерд┐рддрд┐ рдЧрд▓рддреА рд╕реЗ рдлреИрд▓рдиреЗ рд▓рдЧрддреА рд╣реИ:
void example() { Ns momenum; get_momentum(momentum); trajectory_correction(momentum); }
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдмрд╕ рдпрд╣ рдХрд░рдирд╛ рд╣реИ:
void example() { Ns momentum; if (get_momentum(momentum)) { trajectory_correction(momentum); } }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЬрдмрд░рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
std::optional<Ns> get_momentum() { if (!some_condition()) return std::nullopt; return std::make_optional(Ns{ 3 }); }
рдпрджрд┐ рдЖрдк
optional
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рдХрд╛рдлреА рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛:
bool X Ns
рдмрдЬрд╛рдп
bool X Ns
рд╣рдореЗрдВ
Ns + 1
рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рддреЛ
nullopt
рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз
nullopt
рдпрд╛
nullopt
ред рдЕрдм, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдорд╛рдиреНрдп
Ns
рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдлреИрд▓ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдм рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЛ
Ns
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╣рдореЗрдВ рдЗрд╕рдХреА рдХреАрдордд рдХреЛ рдПрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
void example() { auto maybeMomentum = get_momentum(); if (maybeMomentum) { trajectory_correction(*maybeMomentum); } }
рдЕрд╕рд▓ рдореЗрдВ, рд╣рдо рдкрд░рд┐рдгрд╛рдо рдпрд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрдЬрд╛рдп рдкрд░рд┐рдгрд╛рдо рдпрд╛ рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╣рдорд╛рд░реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рднреА рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреА рдЧрдгрдирд╛ рдореЗрдВ рд▓реАрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рддреЛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ рдпрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред
рдЖрд░рдП IIRAII рдХрд╛ рдорддрд▓рдм рд░рд┐рд╕реЛрд░реНрд╕ рдПрдХреНрд╡рд┐рдЬрд┐рд╢рди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╣рдж рддрдХ рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд░рд┐рд╣рд╛рдИ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред рдирд╛рдо рдкрд╣рд▓реА рдмрд╛рд░ C ++ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, .NET рд╕реЗ
IDisposable
рджреЗрдЦреЗрдВ)ред RAII рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрд╕рд╛рдзрди рд╕рдлрд╛рдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╕рдВрд╕рд╛рдзрди рдХреНрдпрд╛ рд╣реИрдВ? рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ: рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди, рдУрдПрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рд╕рдВрд╕рд╛рдзрди рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЙрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рдЕрдзреАрди рд╣реИред рд╣рдо рдЙрдкрдпреБрдХреНрдд рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ: рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░реЗрдВ, рдЗрд╕реЗ рд╣рдЯрд╛рдПрдВ, рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВ, рдЖрджрд┐ред
рдЪреВрдВрдХрд┐ рдпреЗ рд╕рдВрд╕рд╛рдзрди рдмрд╛рд╣рд░реА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдореЗрдВ
delete
рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
struct Foo {}; void example() { Foo* foo = new Foo(); delete foo; }
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ рдХреНрдпрд╛ рд╣рдореЗрдВ рдХреЙрд▓
delete
рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ?
void example() { Foo* foo = new Foo(); throw std::exception(); delete foo; }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрдм
delete
рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рд╕реЛрд░реНрд╕ рд▓реАрдХ рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдРрд╕реА рдореИрдиреБрдЕрд▓ рд╕рдлрд╛рдИ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
unique_ptr
рд╣реИ:
void example() { auto foo = std::make_unique<Foo>(); throw std::exception(); }
рд╣рдорд╛рд░рд╛
unique_ptr
рдПрдХ рд╕реНрдЯреИрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдпрд╣ рд╕реНрдХреЛрдк
unique_ptr
(рдЬрдм рдлрдВрдХреНрд╢рди рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ рдпрд╛ рдЬрдм рд╕реНрдЯреИрдХ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ), рддреЛ рдЗрд╕рдХреЗ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╣реИ рдЬреЛ
delete
рдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рдЕрдм рд╕реНрдореГрддрд┐ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ - рд╣рдо рдЗрд╕ рдХрд╛рдо рдХреЛ рд░реИрдкрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдЗрд╕реА рддрд░рд╣ рдХреЗ рд░реИрдкрд░ рдореМрдЬреВрдж рд╣реИрдВ (рдпрд╛ рдирд┐рд░реНрдорд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ) рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рд╕реЗ рдУрдПрд╕
CloseHandle
рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд┐рдзреНрд╡рдВрд╕рдХ
CloseHandle
)ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЦреНрдп рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд╕рдлрд╛рдИ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ; рдпрд╛ рддреЛ рдореМрдЬреВрджрд╛ рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рдЖрд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред
рдирд┐рд╖реНрдХрд░реНрд╖рд╣рдордиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬреЛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рддреАрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реБрдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА:
- рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдордЬрдмреВрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрджрд┐рдо рдХреЗ рдкреНрд░рддрд┐ рдЬреБрдиреВрди рдХреЗ рд╡рд┐рдкрд░реАрдд)ред
- рд░рд╛рдЬреНрдп рд╕реНрдерд╛рди рдХреЛ рдХрдо рдХрд░рдирд╛, рдкрд░рд┐рдгрд╛рдо рдпрд╛ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрдирд╛, рдкрд░рд┐рдгрд╛рдо рдпрд╛ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВред
- RAII рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрдиред
рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░рддреЗ рд╣реИрдВред