рд╕реА ++ рдореЗрдВ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ


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

рд╕реА ++ рдореЗрдВ рд╕рдВрджрд░реНрдн рдСрдкрд░реЗрдЯрд░ рдЕрдзрд┐рднрд╛рд░ рддрдВрддреНрд░ рдХреА рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджрд┐рдПред рд╢реБрджреНрдз рд╕реА рдореЗрдВ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд▓реИрд╡рд▓реНрдпреВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдЕрд╕реНрдкрд╖реНрдЯ рд╢рдмреНрдж "рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ" рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

//  C int a; int foo(int); a = 7; //  a - int 5 = 7; //   5 - int foo(42) = 7; //   foo(42) -  int 

рдЗрд╕ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рддреАрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ: рдЪрд░ a, рд╢рд╛рдмреНрджрд┐рдХ "5" рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдлреВ (42) рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВ - int, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЪрд░ lvalue рд╣реИ рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдлреВ (42) = 7;" рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЗрд╕ рддрд░рд╣ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИред



C ++ рдореЗрдВ, рдПрд░реЗ рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдСрдкрд░реЗрд╢рди рдореЗрдВрдмрд░ рдлрдВрдХреНрд╢рди рдСрдкрд░реЗрдЯрд░ [] (size_t n) рдХреЛ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдЦрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рддреЛ рд▓рд┐рдВрдХ рдереЗред

рдПрдХ рд╕рдВрдХреЗрддрдХ, рдПрдХ рд╕реВрдЪрдХ рдХреА рддрд░рд╣, рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдкрддреЗ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд░реВрдк рд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

рднрд╛рд╖рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓рдХреНрд╖реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рд▓рд┐рдВрдХ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рд▓рд┐рдВрдХ рдкрд░ рд╕рднреА рдСрдкрд░реЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк:
1. рд▓рд┐рдВрдХ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреБрди: рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
2. рдЖрдк рд▓рд┐рдВрдХ рдореЗрдВ рдореМрдЬреВрдж рдкрддреЗ рдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдпрд╛ NULL рдХреЗ рдкрддреЗ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЗрди рдЧреБрдгреЛрдВ рд╕реЗ, рдмрджрд▓реЗ рдореЗрдВ, рдЕрдиреНрдп рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХрд╛ рдкрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИ:
3. рд▓рд┐рдВрдХ рдХреЛ рдЖрд░рдВрдн рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ)ред
4. рд▓рд┐рдВрдХ рдореЗрдВ рдЕрд╢рдХреНрдд рдкрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ)ред

рдкрд┐рдЫрд▓реЗ рджреЛ рдЧреБрдг рд▓рд┐рдВрдХ рдХреЗ рдорд╣рд╛рди рд▓рд╛рдн рд╣реИрдВред рдореИрдВ рдЕрдХреНрд╕рд░ рдЗрди рджреЛрдиреЛрдВ рдЧреБрдгреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдбрд┐рдВрдЧ рдЧрд╛рдЗрдб , рдПрдХ рдФрд░ рдПрдХ , рд╕реНрдЯреИрдХрдСрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдПрдХ рдЪрд░реНрдЪрд╛ рдФрд░, рдЕрдлрд╕реЛрд╕ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╡рд┐рдирдореНрд░ рд╕реЗрд╡рдХ рдЬрд┐рд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдкрд╛рд░ рдЖрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╡рд┐рдкрд░реАрдд рд░рд╛рдп рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Google рдФрд░ рдЯреНрд░реЛрд▓рдЯреЗрдХ рдЗрдВрдЬреАрдирд┐рдпрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ), рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рдВрдХ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмреАрдЪ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред

рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп "рдЖрдЙрдЯрдкреБрдЯ" рдХреЗ рддрдереНрдп рдХреЛ рдмрд╣реБрдд рд╣реА рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ:
  color.getHsv(&h, &s, &v); //      getHsv()    h,s,v color.getHsv(h, s, v); //   h,s,v    

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

рд▓рд┐рдВрдХ рдореЗрдЯрд╛-рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рдХрдард┐рдирд╛рдИ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВ, Boost.Ref рдЬреИрд╕реА рдмреИрд╕рд╛рдЦреА рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред

рд▓рд┐рдВрдХ STL рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рддрддреНрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдПрдХ рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд▓рд┐рдВрдХ рдлрд╝реАрд▓реНрдб рд╣реИ, рдПрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ (рдЧрдВрджреЗ рд╣реИрдХ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдРрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдПрдБ рдХрдВрдЯреЗрдирд░ рдХреЗ рддрддреНрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкрдХрдбрд╝реЗ рдЧрдП рдмрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░:
 template<class T> T foo(T x) { ... } template<class T> class Bar { public: static T baz(T x) { return foo(x); } }; std::string str = Bar<std::string>::baz(getTitle()); //  ColorDescriptor& desc = Bar<ColorDescriptor&>::baz(getColorDescriptor()); // ! 

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 template<class T> class SizeOfTest { public: static bool sizeOfIsOK() { return sizeof(SizeOfTest<T>) >= sizeof(T); } private: T m_data; }; struct BigData { char d[1000]; }; assert(SizeOfTest<int>::sizeOfIsOK()); //  assert(SizeOfTest<BigData>::sizeOfIsOK()); //  assert(SizeOfTest<BigData&>::sizeOfIsOK()); // ! 

рдЗрд╕рд▓рд┐рдП рд▓рд┐рдВрдХ C ++ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рд╡реЗ рдмрдирд╛рдП рдЧрдП рдереЗред

рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, "рд╕рд╛рдл" рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рдорд╛рдВрдЧ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ - рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЖрд░рдВрднреАрдХреГрдд рд╣реИрдВ рди рдХрд┐ NULLред рдФрд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрдпрд╛ рд╣реИ - рдЧреБрдг (3,4) рдЙрдирдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рд╕реВрдЪрдХ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ C ++ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕реАрдорд┐рдд рдЪрдпрди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред

рдЖрдЗрдП рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдкрдирд╛ рджреЗрдЦреЗрдВ рдФрд░ рдЦреБрдж рдХреЛ рдкрд┐рдЫрдбрд╝реЗ рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рдврд╛рдВрдЪреЗ рд╕реЗ рдореБрдХреНрдд рдХрд░реЗрдВред

рдпрджрд┐ рдпрд╣ рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рдереА, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП (3,4) рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЧреБрдг рд╕реНрд╡рдпрдВ рдмрдирд╛рдКрдВрдЧрд╛ред рдЯреАред рдИред
 int a = 5, b = 5; int* p1; //  int* p2 = null; //  int* p3 = &a; int* p4 = &b; assert(p3 != p4); assert(*p3 == *p4); p3 = &b; assert(p3 == p4); int * p5 = std::min(p3, p4); int * p6 = new int(5); // new    ,    if (p5) { ... } //  -   bool      . 

рд▓реЗрдХрд┐рди NULL рдХрд╛ рдХреНрдпрд╛? рдЖрдЦрд┐рд░рдХрд╛рд░, рдХрднреА-рдХрднреА рд╡реИрдХрд▓реНрдкрд┐рдХрддрд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреА рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрд╢рдХреНрдд рдкреЙрдЗрдВрдЯрд░реНрд╕ рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдСрд░реНрдереЛрдЧреЛрдирд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 int a = 5; int? b = 5; //   int int? c = null; //   int assert(a == b); assert(b != c); int* p0 = &a; int*? p1 = &a; int*? p2 = null; int*? p3 = &b; //  int?* p4 = &b; int?*? p5 = null; p5 = p4; p4 = p5; //  *p0 = 7; *p1 = 7; // : p1 -    if(p1 != null) { *?p1 = 7; } p0 = ?p1; 

рдХреНрдпрд╛ рдмрд┐рдирд╛ рд▓рд┐рдВрдХ рдХреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдЖрдЗрдпреЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рддреЗ рд╣реИрдВред

рдЪрд▓реЛ рдирд┐рд░рдВрддрд░ рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рд╡рд┐рдзрд┐ рдПрдХ рддрд░реНрдХ рдХреЛ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдХреБрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрдХреВрд▓рди рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рд╣реА рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

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

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

рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрджрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрд╛рд░реНрде "рдПрдХ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЗрд╕ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" рдЙрдкрдпреБрдХреНрдд рд╣реИ, рддреЛ рдпрд╣ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  1. рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдЬреЛрдбрд╝реЗрдВ - рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдореЗрд╢рд╛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛ред
     class MyClass { public: MyClass(MyClass src) //    const MyClass& src. { ... } }; 
  2. рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рдЬрд╛рдПрдВ:
     class MyClass { public: MyClass(const MyClass* src, std::copy_ctor_tag) { ... } }; 

рдЕрдм рд╡рд╛рдкрд╕ рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдПред

рд╢реБрджреНрдз рд╕реА рдореЗрдВ, рдХреЗрд╡рд▓ рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ, рд╡рд┐рднрд┐рдиреНрди рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкреНрд░рдХрд╛рд░, рдЙрдкрд╕рд░реНрдЧ рд╡реГрджреНрдзрд┐ рдФрд░ рдЧрд┐рд░рд╛рд╡рдЯ, рдФрд░ рдЦреБрдж рдХреЛ рдбреАрд░реЗрдВрд╕ред рд╡рд╣ рд╕рдм рд╣реИред рдЗрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореИрдкрд┐рдВрдЧ рдХреЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рдПрдВ:
 a[i] = b; *a.operator[](i) = b; (++i) = x; *i.operator++() = x; (x = y) = z; *x.operator=(y) = z; *p = d; *p.operator->() = d; 

рдЙрд╕реА рд╕рдордп, рдЕрдиреБрдореЗрдп рдСрдкрд░реЗрдЯрд░ рдЧреИрд░-рд▓реЛрдбрд┐рдВрдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдСрдкрд░реЗрдЯрд░ -> рд╕рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд▓реИрд╡рд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЦрдВрдбрди рдХрд░рддреА рд╣реИ - рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХрднреА рднреА рдХреЛрдб рдХреЛ рдбрд┐рдмрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "a + b" рдЕрдкрдиреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИ, рдпрд╛ рд╕рдордЭрддреА рд╣реИ рдХрд┐ рд░рд┐рдХреЙрд░реНрдб "foo (42 = 7) рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ" ? тАЭред

рдирд┐рдпрдо рдХрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж I / O рдкреНрд░рд╡рд╛рд╣ рд╣реИред рдЖрдк << рдСрдкрд░реЗрдЯрд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрд╡рдпрдВ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдЗрд╕реЗ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕реА рд╕рдордп рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рд╕реВрдЪрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдмреЗрд╣рддрд░, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдг рд╡рд╕реНрддреБ:
 int main() { std::fstream filestr("test.txt", fstream::out); std::outref(&filestr) << "foo = " << foo << ", bar = " << bar << std::endl; return 0; } std::outref operator<<(std::outref ref, MyClass obj) { ref << obj.x; ref << obj.y; ref << obj.z; return ref; } 

рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕реА ++ рдореЗрдВ рд▓рд┐рдВрдХ рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рдерд╛ред

рд╕рд╛рд░рд╛рдВрд╢


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

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


All Articles