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

рдЕрдм рдЖрдк рдЬреЛ рдЬрд┐рдл рджреЗрдЦрддреЗ рд╣реИрдВ, рд╡рд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдореБрдЦреНрдп рд╕рдВрджреЗрд╢ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдЧрднрдЧ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдпрд╛, рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рдЙрд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдХрд┐рд╕реА рдиреЗ рдХрд╣рд╛ рдХрд┐ рддреАрди рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдЧрд╛рдпрдм рд╣реИрдВред рдПрдХ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рд╣реБрдИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдореБрдЭреЗ рдЗрд╕ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдм рд╢реБрд░реВ рд╣реБрдЖред
рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдХреЛрд▓реЗ рдпреБрд╕реБрдЯрд┐рд╕ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрддрд╛рдпрд╛ рдерд╛ ред рдЙрдирдХреА рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдПрдХ рд╕реНрд▓рд╛рдЗрдб рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ 19 рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рдереЗ:
int i1;
рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреВрдареА рд╕реНрдерд┐рддрд┐ рд╣реИред рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди C ++ рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдорд╛рдирдХ, рд╕реБрдзрд╛рд░реЛрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХреА рдХрдИ рд░рд┐рдкреЛрд░реНрдЯреЗрдВ рдорд┐рд▓реА рд╣реЛрдВрдЧреАред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рдпрдо рдорд╛рдирдХ рд╕реЗ рдорд╛рдирдХ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЕрдирдЧрд┐рдирдд рдкреЛрд╕реНрдЯ рд╣реИрдВ рдХрд┐ C ++ рдореЗрдВ рдХреИрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИред
рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛: рдкрд╣рд▓реЗ рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕реА рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рдерд╛, рдлрд┐рд░ рд╕реА ++ 98 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдлрд┐рд░ рд╕реА ++ 03, рд╕реА ++ 11, рд╕реА ++ 14 рдФрд░ рд╕реА ++ 17 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдореИрдВ рдЙрдЪрд┐рдд рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдкрдиреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рджреВрдВрдЧрд╛ред рдореИрдВ C ++ 20 рдореЗрдВ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрд╡рд▓реЛрдХрди рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рдПрдЧреАред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рд░рдВрдн (C)
C ++ рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ C рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВ, рдЗрд╕реАрд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВрдЧреЗред C рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд░рдВрднреАрдХреГрдд рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдПрдХ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдирд╛рдо рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдмрд╕ рдЖрд░рдВрднрд┐рдХ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк C ++ рдФрд░ C рдореЗрдВ рдПрдХ рдЕрдирдЗрдВрд╕реНрдЯрд╛рд▓реНрдпреВрдЯреЗрдб рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ:
int main() { int i; return i;
рдпрд╣реА рдмрд╛рдд рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ: рдпрджрд┐ рдХрд┐рд╕реА struct
рдореЗрдВ рдЕрд╕рд┐рдВрдЪрд┐рдд рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рднреА:
struct Widget { int i; int j; }; int main() { Widget widget; return widget.i;
рдХрдИ рдирдП рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ C ++ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ: рдХрдХреНрд╖рд╛рдПрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рдирд┐рдЬреА, рд╡рд┐рдзрд┐рдпрд╛рдБ, рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреЗрд╡рд▓ рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреБрдЫ рддрддреНрд╡ рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЖрд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИ:
class Widget { public: Widget() {} int get_i() const noexcept { return i; } int get_j() const noexcept { return j; } private: int i; int j; }; int main() { Widget widget; return widget.get_i();
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ C ++ рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕ рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЬрд╛рджреБрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ C ++ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд░рд┐рдпрд░ рдХреЗ рдкрд╣рд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ред рди рддреЛ рд╕рдВрдХрд▓рдХ рдФрд░ рди рд╣реА рдЖрдИрдбреАрдИ, рдЬреЛ рдореИрдВрдиреЗ рддрдм рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдпрд╣ рдпрд╛рдж рджрд┐рд▓рд╛рдпрд╛ред рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЙрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ, рдЗрди рд╡рд░реНрд╖реЛрдВ рдХреЗ рджреМрд░рд╛рди рд▓рд┐рдЦреЗ рдЧрдП рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рдХреАрдбрд╝реЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реБрдЖ рдХрд┐ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдЪрд░ рдХрд╛ рдЖрд░рдВрдн рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
C ++ 98 рдореЗрдВ, рдЖрдк рд╕рджрд╕реНрдп initializer рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рднреВрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрд░рдВрднреАрдХрд░рдг рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рджрд╕реНрдп рдЖрд░рдВрднреАрдХрд░рдг рд╕реВрдЪреА рдХреЗ рдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ:
рд╕реА ++ 11 рдореЗрдВ, рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рджрд╕реНрдп рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ, рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВред рд╡реЗ рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рднреА рдЪрд░ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рддрддреНрд╡ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╣реИрдВ:
рдореЗрд░реА рдкрд╣рд▓реА рд╕рд┐рдлрд╛рд░рд┐рд╢: рдЬрдм рднреА рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рдбреАрдПрдордЖрдИ (рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рджрд╕реНрдп рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ ( float
рдФрд░ int
) рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрддреНрд╡реЛрдВ рдХреА рдЖрджрдд рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЪреЗрдд рд░реВрдк рд╕реЗ рдкреЗрд╢ рдХрд░рддреА рд╣реИред
рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╛рд░рдВрдн (C)
рддреЛ, рд╕реА рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдкрд╣рд▓реА рдЖрд░рдВрднреАрдХрд░рдг рд╡рд┐рдзрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрд░рдВрднреАрдХрд░рдг рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ рдХреЙрдкреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЪрд░ рдФрд░ рдмрд░рд╛рдмрд░ рдЪрд┐рд╣реНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ - рдЗрд╕рдХрд╛ рдореВрд▓реНрдп:
рдЬрдм рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЬрдм рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЙрдкреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдПрдХ рд╕рдорд╛рди рдЪрд┐рд╣реНрди рдпрд╣ рдорд╛рди рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдХреЙрдкреА рдЖрд░рдВрднреАрдХрд░рдг рдПрдХ рдореВрд▓реНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд╡рд┐рдирд┐рдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐: рдпрджрд┐ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рд░реВрдкрд╛рдВрддрд░рдг рдЕрдиреБрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рдЕрдиреБрдХреНрд░рдо рдХреЗ рдХреБрдЫ рдирд┐рдпрдо рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдирд╣реАрдВ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рддреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ:
struct Widget { explicit Widget(int) {} }; Widget w1 = 1;
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреНрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдмрджрддрд░ рд╣реИ, рддреЛ рдХреЙрдкреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рдЕрдирджреЗрдЦреА рдХрд░реЗрдЧрд╛:
struct Widget { explicit Widget(int) {} Widget(double) {} }; Widget w1 = 1;
рдПрдЧреНрд░реАрдЧреЗрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (C)
рддреАрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╡рд╣ рд╣реИ рдПрдЧреНрд░реАрдЧреЗрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди ред рдЗрд╕реЗ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рд░рдгреА рдХреЛ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
int i[4] = {0, 1, 2, 3};
рдпрджрд┐ рдЖрдк рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
int j[] = {0, 1, 2, 3};
рд╕рдорд╛рди рдЖрд░рдВрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрд▓ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡реЗ рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВ (рдХреБрд▓ рд╡рд░реНрдЧреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рдФрд░ рдирд┐рдпрдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЙрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ):
struct Widget { int i; float j; }; Widget widget = {1, 3.14159};
рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдиреЗ C рдФрд░ C ++ 98 рдореЗрдВ рднреА рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░, C ++ 11 рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рдЖрдк рдЗрд╕рдореЗрдВ рд╕рдорд╛рди рдЪрд┐рд╣реНрди рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
Widget widget{1, 3.14159};
рдПрдХрддреНрд░реАрдХрд░рдг рдЖрд░рдВрднреАрдХрд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдЧреНрд░реАрдЧреЗрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рджреЛрдиреЛрдВ рдПрдХ рд╕рдорд╛рди рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рде рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:
struct Widget { explicit Widget(int) {} }; struct Thingy { Widget w1, w2; }; int main() { Thingy thingy = {3, 4};
рдФрд░ рдЕрдЧрд░ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрддрд░ рд╣реЛ:
struct Widget { explicit Widget(int) {} Widget(double) {} }; struct Thingy { Widget w1, w2; }; int main() { Thingy thingy = {3, 4};
рдЖрдЗрдП рд╕рдордЧреНрд░ рдЖрд░рдВрдн рдХреЗ рдПрдХ рдФрд░ рдЧреБрдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рд╢реНрди: рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд┐рд╕ рдореВрд▓реНрдп рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИ?
struct Widget { int i; int j; }; int main() { Widget widget = {1}; return widget.j; }
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рдардпрд╣ рд╕рд╣реА рд╣реИ, рд╢реВрдиреНрдп рд╣реИред рдпрджрд┐ рдЖрдк рдХреБрд▓ рдЖрд░рдВрдн рдХреЗ рджреМрд░рд╛рди рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрднреА рднреА рдЕрд╕рдВрдЧрдард┐рдд рддрддреНрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЧреНрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдПрдЧреНрд░реАрдЧреЗрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рдмреНрд░реИрдХреЗрдЯреНрд╕ (рдмреНрд░реЗрд╕ рдПрд▓рд┐рд╕реЗрдВрд╕) рдХреА рдЪреВрдХ рд╣реИред рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрдпрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ? рдЗрд╕рдореЗрдВ рдПрдХ Widget
, рдЬреЛ рджреЛ int
рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдФрд░ Thingy
, Widget
рдФрд░ int
рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдЖрд░рдВрднреАрдХрд░рдг рдорд╛рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ: {1, 2}
?
struct Widget { int i; int j; }; struct Thingy { Widget w; int k; }; int main() { Thingy t = {1, 2}; return tk;
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рдардЙрддреНрддрд░ рд╢реВрдиреНрдп рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╕рдмрдЧреНрд░реИрдЧреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдПрдЧреНрд░реАрдЧреЗрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рд╣реИред рдиреЗрд╕реНрдЯреЗрдб рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдЬреЛрдбрд╝реА рдХреЛрд╖реНрдардХ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдм-рдПрдЧреНрд░реАрдЧреЗрдЯ рдХрд╛ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ {1, 2}
{{1, 2}, 0}
рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред
рд╕реНрдЯреЗрдЯрд┐рдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (C)
рдЕрдВрдд рдореЗрдВ, рд╕реНрдереИрддрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рднреА C рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ: рд╕реНрдереИрддрд┐рдХ рдЪрд░ рд╣рдореЗрд╢рд╛ рдЖрд░рдВрднрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдерд┐рд░ рдЪрд░ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдХреЛрдИ рдорд╛рди рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╢реВрдиреНрдп рдкрд░ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
static int i = 3;
рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо 3 рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА j
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдпрджрд┐ рдЪрд░ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рдпрд╣рд╛рдБ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛:
static Colour red = {255, 0, 0};
рдЗрд╕рдореЗрдВ рдПрдХ рд░рдВрдЧ рд╡рд░реНрдЧ рдерд╛, рдФрд░ рдкреНрд░рд╛рдердорд┐рдХ рд░рдВрдЧ (рд▓рд╛рд▓, рд╣рд░рд╛, рдиреАрд▓рд╛) рдХреЛ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдПрдХ рдорд╛рдиреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдПрдХ рдФрд░ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореЗрдВ red
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдХрдареЛрд░ рдХреНрд░рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд░ рдЖрд░рдВрднрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВред рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рд╡реИрд░рд┐рдПрдмрд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдпрд╣ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╕реА ++ 11 рдореЗрдВ constexpr
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛, рдФрд░ рдлрд┐рд░ рд╣рдо рдирд┐рд░рдВрддрд░ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрд░рдВрднреАрдХрд░рдг рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИрдВред
рддреЛ, рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг C рднрд╛рд╖рд╛ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрд░рдВрднреАрдХрд░рдг, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛, рд╕рдореБрдЪреНрдЪрдп рдФрд░ рд╕реНрдереИрддрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдгред
рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╛рд░рдВрдн (C ++ 98)
рдЪрд▓реЛ C ++ 98 рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж C рд╕реЗ C ++ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЙрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
Widget widget(1, 2); int(3);
рдПрдХ рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдФрд░ float
рдЬреИрд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрд╖реНрдардХ рдореЗрдВ рдПрдХ рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИред
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ ( int
, bool
, float
) рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреЙрдкреА рдЖрд░рдВрднреАрдХрд░рдг рд╕реЗ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде, рдЖрдк рдХрдИ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрд░рдВрднреАрдХрд░рдг рдПрдХ рд░реВрдкрд╛рдВрддрд░рдг рдЕрдиреБрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рд╕рдВрдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрд░рдВрднреАрдХрд░рдг рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп C ++ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрд░рдВрднреАрдХрд░рдг рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ:
struct Widget { explicit Widget(int) {} }; Widget w1 = 1;
рджреЛ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХрдо рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдкрд╣рд▓реЗ рдХреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдпрд╣ рдЕрдХреНрд╕рд░ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реИ:
struct Widget { explicit Widget(int) {} Widget(double) {} }; Widget w1 = 1;
рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддреНрдпрдХреНрд╖ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдореЗрд╢рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБ рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреЛрд╖реНрдардХ рдореЗрдВ рдФрд░ cast
рднрд╛рд╡реЛрдВ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде new
рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдирд╡реЛрдХреЗрд╢рди рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
useWidget(Widget(1, 2));
рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддрдм рддрдХ рдореМрдЬреВрдж рд╣реИ рдЬрдм рддрдХ C ++ рд╕реНрд╡рдпрдВ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЛрд╖ рд╣реИ рдХрд┐ рдирд┐рдХреЛрд▓рд╛рдИ рдиреЗ рдЕрдкрдиреЗ рдореБрдЦреНрдп рднрд╛рд╖рдг рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ: рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдбрд░рд╛рд╡рдиреЗ рдкрд╛рд░реНрд╕ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЬреЛ рдХреБрдЫ рднреА рдШреЛрд╖рдгрд╛ (рдШреЛрд╖рдгрд╛) рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╣ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдШреЛрд╖рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ Widget
рд╡рд░реНрдЧ рдФрд░ рдПрдХ Thingy
рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдПрдХ Thingy
рдирд┐рд░реНрдорд╛рддрд╛ рдЬреЛ рдПрдХ Widget
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
struct Widget {}; struct Thingy { Thingy(Widget) {} }; int main () { Thingy thingy(Widget()); }
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Thingy
рдкреНрд░рд╛рд░рдВрдн рдкрд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ Widget
рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рднреА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ Widget
рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди Thingy
рджреЗрддрд╛ рд╣реИред рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдВрдЧрд╛ред
рд╡реИрд▓реНрдпреВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (C ++ 03)
рдЪрд▓реЛ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ - C ++ 03ред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдП рдереЗ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред C ++ 03 рдореЗрдВ, рдорд╛рди рдЖрд░рдВрднреАрдХрд░рдг рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдЦрд╛рд▓реА рдХреЛрд╖реНрдардХ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ:
int main() { return int();
C ++ 98 рдореЗрдВ, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣рд╛рдВ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░рдВрдн рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ C ++ 03 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдпрдо рдпрд╣ рд╣реИ: рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ, рддреЛ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХрд░рдг рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╕реНрдЯрдо рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
struct Widget { int i; }; Widget get_widget() { return Widget();
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдирдП Widget
рд▓рд┐рдП рдореВрд▓реНрдп рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ Widget
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрддреНрд╡ i
рддрдХ Widget
ред C ++ 03 рдХреЗ рдмрд╛рдж рд╕реЗ, рдпрд╣рд╛рдВ рд▓реМрдЯрд╛ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рдРрд╕рд╛ рдХреЛрдИ рдирд┐рд░реНрдорд╛рддрд╛ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди i
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рд╣рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ:
struct Widget { Widget() {}
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд" рдХрд╛ рдЕрд░реНрде "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд" рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рд╢рд░реАрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддреН рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ред рдпрджрд┐ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдмреЙрдбреА рдХреЛ = default
рд╕рд╛рде рдмрджрд▓реЗрдВ (рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ C ++ 11 рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рдереА), рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЕрд░реНрде рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
struct Widget { Widget() = default;
рдЕрдм рдХреНрд▓рд╛рд╕ рд╕реЗ рдмрд╛рд╣рд░ Widget() = default
рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ Widget() = default
ред рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЕрд░реНрде рдлрд┐рд░ рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ: Widget() = default
рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдлрд┐рд░ рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрддрд╛ рд╣реИред
struct Widget { Widget(); int i; }; Widget::Widget() = default;
рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реНрдХ рд╣реИ: рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдХреЗ рдЕрдВрджрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп .cpp
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ = default
рд╕рд╛рде рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (C ++ 11)
C ++ 11 рдореЗрдВ рдХрдИ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдереЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдПрдХрд░реВрдкрддрд╛ рдкреЗрд╢ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕реЗ рдореИрдВ "рдЧреЗрдВрдбрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди" рдХрд╣рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдЬрд╛рджреБрдИ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд╣ рдХреНрдпреЛрдВ рджрд┐рдЦрд╛рдИ рджреАред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВ, C ++ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд░рдВрднреАрдХрд░рдг рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВред рдХреЛрд╖реНрдардХ рдХреЗ рд╕рд╛рде рд╡реЗрдХреНрд╕рд┐рдВрдЧ рдкрд╛рд░реНрд╕ рдиреЗ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХреБрд▓ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди std::vector
рдЬреИрд╕реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ .push_back
рдФрд░ .push_back
рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд .push_back
, рдпрд╛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд░рд╛рд╡рдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
рднрд╛рд╖рд╛ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЛ рдкреЗрд╢ рдХрд░рдХреЗ рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рди рд╕рдВрдХреЗрдд рдХреЗ рдмрд┐рдирд╛ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд┐рдХрдЯ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдирдП рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд╕реВрдЪреА рдЖрд░рдВрднреАрдХрд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдпрд╣ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдкреНрд░рддреНрдпрдХреНрд╖ рдФрд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╕ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рдореЗрдВ - рдПрдХ рд╕рдорд╛рди рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рде рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝:
рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреБрдХреНрдд рд╕реВрдЪреА рдХреЛ рдмреНрд░реЗрдбреЗрдб-рдЗрдирд┐рдЯ-рд╕реВрдЪреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рд╕реВрдЪреА рдПрдХ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред рдкреВрд░реНрд╡ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ C ++ 11 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдХреБрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреА рд╕реВрдЪреА рдореЗрдВ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ std::initializer_list
рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ std::initializer_list
, рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ рдЬреЛ std::initializer_list
рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
template <typename T> class vector {
рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ C ++ рд╕рдорд┐рддрд┐ рдХреЗ рдкрдХреНрд╖ рд╕реЗ, std::initializer_list
рд╕рдмрд╕реЗ рд╕рдлрд▓ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдерд╛ред рдЙрд╕рд╕реЗ рдЕрдЪреНрдЫреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдиреБрдХрд╕рд╛рдиред
рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, std::initializer_list
рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХрд╛ рд╡реЗрдХреНрдЯрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ const
рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕рдореЗрдВ рдХрд╛рд░реНрдп begin
рдФрд░ end
рд╣реИрдВ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдВ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИрдВ, рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ std::initializer_list
рддрддреНрд╡ const
, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ T
рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдХреА рдЪрд╛рд▓ рдХрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдЧрд▓рд╛, std::initializer_list
рдПрдХ рд╡рд╕реНрддреБ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╣рдо, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдо рдЕрднреА рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред
рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдПрдХ рдкреЛрд▓ рд╣реБрдЖ рдерд╛: рдпрджрд┐ рдЖрдк рд╕рдордп рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реА ++ рд╕реЗ рдХреБрдЫ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреНрдпрд╛ рд╣рдЯрд╛рдПрдВрдЧреЗ? рд╕рднреА рд╡реЛрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ initializer_list
рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред
https://twitter.com/shafikyaghmour/status/1058031143935561728
, initializer_list
. , .
, . , initializer_list
, . :
std::vector<int> v(3, 0);
vector
int
, , , тАФ . . , initializer_list
, 3 0.
:
std::string s(48, 'a');
48 ┬л┬╗, ┬л0┬╗. , string
initializer_list
. 48 , . ASCII 48 тАФ ┬л0┬╗. , , , int
char
. . , , .
. , ? ?
template <typename T, size_t N> auto test() { return std::vector<T>{N}; } int main () { return test<std::string, 3>().size(); }
, тАФ 3. string
int
, 1, std::vector<std::int>
initializer_list
. initializer_list
, . string
int
float
, , . , . , emplace , . , {}
.
, .
.
тАФ ( {a}
)
( = {a}
);
:
- ┬л┬╗ ,
std::initializer_list
.
тАФ . - ,
()
.
.
1: = {a}
, a
,
.
2: , {}
.
, initializer_list
.
Widget<int> widget{}\
?
template Typename<T> struct Widget { Widget(); Widget(std::initializer_list<T>); }; int main() { Widget<int> widget{};
, , initializer_list
, initializer_list
. . , , initializer_list
. , . , .
{}
. , -, , Widget() = default
Widget() {}
тАФ .
Widget() = default
:
struct Widget { Widget() = default; int i; }; int main() { Widget widget{};
Widget() {}
:
struct Widget { Widget() {};
: , (narrowing conversions). int
double
, , :
int main() { int i{2.0};
, double
. C++11, , . :
struct Widget { int i; int j; }; int main() { Widget widget = {1.0, 0.0};
, , , , (brace elision). , , . , map
. map
, тАФ :
std::map<std::string, std::int> my_map {{"abc", 0}, {"def", 1}};
, . :
std::vector<std::string> v1 {"abc", "def"};
, , initializer_list
. initializer_list
, , , . , . , .
initializer_list
тАФ initializer_list
, . , const char*
. , string
, char
. . , , .
:
. braced-init-list . :
Widget<int> f1() { return {3, 0};
, , braced-init-list . braced-init-list , .
, . StackOverflow , . , . , , :
#include <iostream> struct A { A() {} A(const A&) {} }; struct B { B(const A&) {} }; void f(const A&) { std::cout << "A" << std::endl; } void f(const B&) { std::cout << "B" << std::endl; } int main() { A a; f( {a} ); // A f( {{a}} ); // ambiguous f( {{{a}}} ); // B f({{{{a}}}}); // no matching function }
++14
, C++11 . , , . C++14. , .
, ++11 direct member initializers, . , direct member initializers . ++14, direct member initializers:
struct Widget { int i = 0; int j = 0; }; Widget widget{1, 2};
, auto
. ++11 auto
braced-init-list, std::initializer_list
:
int i = 3;
: auto i{3}
, int
, std::initializer_list<int>
. ++14 , auto i{3}
int
. , . , auto i = {3}
std::initializer_list<int>
. , : int
, тАФ initializer_list
.
auto i = 3;
, C++14 , , , , . , .
, ++14 :
, , std::initializer_list
.
std::initializer_list
move-only .
c , emplace
make_unique
.
, :
, , .
: assert(Widget(2,3))
, assert(Widget{2,3})
. , , , . , . .
C++
, ++.
int
, . . тАФ , .
: , , std::initializer_list
, direct member initializers. , .
, ├й . .
struct Point { int x = 0; int y = 0; }; setPosition(Point{2, 3}); takeWidget(Widget{});
braced-init-list тАФ .
setPosition({2, 3}); takeWidget({});
, , . , тАФ , . , , , , , . , , initializer_list
. : , , .
:
= value
= {args}
= {}
:
std::initializer_list
- direct member initialisation (
(args)
)
{args}
{}
├й
(args)
, (args)
vexing parse. . 2013 , , auto
. , : auto i;
тАФ . , :
auto widget = Widget(2, 3);
, . , , vexing parse:
auto thingy = Thingy();
┬л auto┬╗ (┬лalmost always auto┬╗, AAA), ++11 ++14 , , , std::atomic<int>
:
auto count = std::atomic<int>(0);
, atomic . , , , , . ++17 , , (guaranteed copy elision):
auto count = std::atomic<int>(0);
auto
. тАФ direct member initializers. auto
.
++17 CTAD (class template argument deduction). , . . , CppCon, CTAD , . , ++17 , ++11 ++14, , . , , , , .
(++20)
++20, . , , : (designated initialization):
struct Widget { int a; int b; int c; }; int main() { Widget widget{.a = 3, .c = 7}; };
, . , , . , .
, b
.
, , , . , .
, , 99, :
, , . ++ , , . :
Widget widget{.c = 7, .a = 3};
, .
++ , {.ce = 7};
, {.c{.e = 7}}
:
Widget widget{.ce = 7};
++ , , :
Widget widget{.a = 3, 7};
++ . , -, , .
int arr[3]{.[1] = 7};
C++20
++20 , . ( wg21.link/p1008 ).
++17 , , . , , , :
struct Widget { Widget() = delete; int i; int j; }; Widget widget1;
, , . ++20 . , . , . , , , .
( wg21.link/p1009 ). Braced-init-list new
, : , ? тАФ , : braced-init-list new
:
double a[]{1, 2, 3};
, ++11 braced-init-list. ++ . , .
(C++20)
, ++20 . , . ++20 : ( wg21.link/p0960 ).
struct Widget { int i; int j; }; Widget widget(1, 2);
. , emplace
make_unique
. . : auto
, : 58.11 .
struct Widget { int i; int j; }; auto widget = Widget(1, 2);
, :
int arr[3](0, 1, 2);
, : uniform 2.0. . , , , , . тАФ initializer_list
: , , тАФ . , . , - , тАФ . .
, . direct member initializers. auto
. direct member initializers тАФ , . , . тАФ , .
, , . тАФ , тАФ . , .

, , C++ Russia 2019 Piter ┬лType punning in modern C++┬╗ . , ++20, , , ┬л┬╗ ++ , .