рд╕реА++ рднрд╛рд╖реЗрдЪреНрдпрд╛ рдорд╛рдирдХреАрдХрд░рдгрд╛рд╡рд░реАрд▓ ISO рд╕рдорд┐рддреА
рдкреБрдвреАрд▓ рджреЛрди рдорд╣рд┐рдиреНрдпрд╛рдВрдд, рдордВрдЬреВрд░ рддрдкрд╢реАрд▓ рдкреНрд░рдХрд╛рд╢рдирд╛рд╕рд╛рдареА рджрд╕реНрддрдРрд╡рдЬ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдЕрд╕реЗрд▓, рдЬреНрдпрд╛рд╡рд░ рд╕реНрдкреЗрд▓рд┐рдВрдЧ рдЪреБрдХрд╛ рдЖрдгрд┐ рдЯрд╛рдпрдкрд┐рдВрдЧрдЪреНрдпрд╛ рд╕рдВрдкрд╛рджрдХреАрдп рджреБрд░реБрд╕реНрддреНрдпрд╛рдЪреЗ рдХрд╛рдо рдХреЗрд▓реЗ рдЬрд╛рдИрд▓. рдиреЛрд╡реНрд╣реЗрдВрдмрд░рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд╕, рдкрд░рд┐рдгрд╛рдореА рджрд╕реНрддрдРрд╡рдЬ ISO/IEC 14882:2020 рдпрд╛ рдФрдкрдЪрд╛рд░рд┐рдХ рдирд╛рд╡рд╛рдиреЗ рдкреНрд░рдХрд╛рд╢рдирд╛рд╕рд╛рдареА ISO рдХрдбреЗ рдкрд╛рдард╡рд▓реЗ рдЬрд╛рддреАрд▓. рджрд░рдореНрдпрд╛рди, рд╕рдорд┐рддреАрдиреЗ рдЖрдзреАрдЪ рдкреБрдвреАрд▓ C++23 рдорд╛рдирдХ (C++2b) рд╡рд░ рдХрд╛рдо рд╕реБрд░реВ рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдкреБрдвреАрд▓ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдмреИрдардХреАрдд рд╕рдВрднрд╛рд╡реНрдп рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрд▓.
- рдЬреЛрдбрд▓реЗрд▓реЗ "рд╕рдВрдХрд▓реНрдкрдирд╛", рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╕реНрддрд╛рд░, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд рдЬреЗ рд╕рдВрдХрд▓рд┐рдд рд╡реЗрд│реА, рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдореНрд╣рдгреВрди рд╕реНрд╡реАрдХрд╛рд░рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рддрд░реНрдХрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рддрд╛рдд. рдЯреЗрдореНрдкреНрд▓реЗрдЯрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреЗ рдЧреБрдгрдзрд░реНрдо рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреНрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЧреБрдгрдзрд░реНрдорд╛рдВрдордзреАрд▓ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд╕рдВрдЧрддреА рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрдХрд▓реНрдкрдирд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.
рдЯреЗрдореНрдкрд▓реЗрдЯ
рд╕рдорддрд╛рддреБрд▓рдиреАрдп рд╕рдВрдХрд▓реНрдкрдирд╛ = рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - рд╕реНрд╡реАрдХрд╛рд░рд▓реЗ
рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЗрдбрд░ рдлрд╛рдпрд▓реАрдВрдРрд╡рдЬреА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддреАрд▓ рдЕрд╢рд╛ рдореЙрдбреНрдпреВрд▓реНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдореЙрдбреНрдпреВрд▓ "#рд╕рдорд╛рд╡реЗрд╢" рджреНрд╡рд╛рд░реЗ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реНрд╕ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рди рдХрд░рддрд╛, рдШрдЯрдХрд╛рдВрдЪреНрдпрд╛ рд╕реАрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реНрддреНрд░реЛрдд рдХреЛрдб рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдирд╡реАрди рдорд╛рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд. - рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯрдордзреАрд▓ рдЯреЛрдХрдирдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдореЕрдХреНрд░реЛрдЪреНрдпрд╛ рдЕрдиреБрдХреВрд▓реА рд╡рд┐рд╕реНрддрд╛рд░рд╛рд╕рд╛рдареА рдореЕрдХреНрд░реЛ __VA_OPT__.
- рддреАрди-рдорд╛рд░реНрдЧ рддреБрд▓рдиреЗрд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░рд╕рд╛рдареА рд╕рдорд░реНрдерди.
- рдмрд┐рдЯрдлрд┐рд▓реНрдбрд╕рд╛рдареА рдбреАрдлреЙрд▓реНрдЯ рдШрдЯрдХ рдЖрд░рдВрднрд┐рдХрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди.
- рд▓реЕрдореНрдмрдбрд╛ "*рд╣реЗ" рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдХреЕрдкреНрдЪрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.
рд░рдЪрдирд╛ int_value {
int n = 0;
auto getter_fn() {
//рд╡рд╛рдИрдЯ:
// рдкрд░рддрд╛рд╡рд╛ [=]() { рдкрд░рддрд╛рд╡рд╛ n; };// рдЪрд╛рдВрдЧрд▓реЗ:
рд░рд┐рдЯрд░реНрди [=, *рд╣рд╛]() { рд░рд┐рдЯрд░реНрди рдПрди; };
}
}; - рдкреЙрдЗрдВрдЯрд░ (рдкреЙрдЗрдВрдЯрд░-рдЯреВ-рд╕рджрд╕реНрдп) рджреНрд╡рд╛рд░реЗ рдШрдЯрдХрд╛рдВрдирд╛ рдХреЙрд▓ рдХрд░рдгреЗ, "const рдЖрдгрд┐" рдЕрднрд┐рд╡реНрдпрдХреНрддреАрджреНрд╡рд╛рд░реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рд╡рд╕реНрддреВрдВрд╕рд╛рдареА рдкреЙрдЗрдВрдЯрд░ рд╡рд╛рдкрд░рдгреЗ.
- рджрд╕реНрддрдРрд╡рдЬрд╛рдд рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░рд╕рд╣ рд╣рдЯрд╡рд╛ рдСрдкрд░реЗрдЯрд░
P0722R1 . - рд╡рд░реНрдЧрд╛рдВрдирд╛ рдкреНрд░рдХрд╛рд░рд╛рд╢рд┐рд╡рд╛рдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ.
рд░рдЪрдирд╛ foo {
foo() = рдбреАрдлреЙрд▓реНрдЯ;
constexpr foo(int) {}
};рдЯреЗрдореНрдкрд▓реЗрдЯ
рдСрдЯреЛ get_foo() {
рдкрд░рддрд╛рд╡рд╛ f;
}get_foo(); // рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд╛рдкрд░рддреЗ
get_foo (); - рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░рд╕рд╣ рдиреЙрди-рдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рд▓реЕрдореНрдмрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди.
- рд▓реЕрдореНрдмрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрд╕рд╛рдареА рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛рд▓рд╛ рдЕрдиреБрдорддреА рджреЗрдд тАЛтАЛрдЖрд╣реЗ (тАЬрд╕реНрд╡рдпрдВ f = [] (std::рд╡реЗрдХреНрдЯрд░ v)").
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдордзреНрдпреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рдЯрд░рд▓ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.
- рд╕реА-рд╢реИрд▓реА рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рд╕рд┐рдВрдЯреЕрдХреНрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди - рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рд╕реВрдЪреАрдордзреНрдпреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕реВрдЪреАрдмрджреНрдз рдирд╕рд▓реЗрд▓реА рдлреАрд▓реНрдб рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕реБрд░реВ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд.
рд░рдЪрдирд╛ A {
рдЗрдВрдЯ рдПрдХреНрд╕;
int y;
int z = 123;
};A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2
- рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди.
- рд╕рд╢рд░реНрдд рд░рдЪрдирд╛ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдпрддреЗрдмрджреНрджрд▓ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░рд▓рд╛ рд╕реВрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрднрд╛рд╡реНрдп рдЖрдгрд┐ рд╕рдВрднрд╡ рдирд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди (тАЬ[[рд╕рдВрднрд╛рд╡реНрдп]] рдЕрд╕рд▓реНрдпрд╛рд╕ (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ > 0) {тАЬ).
- "рд╕рд╛рдареА" рд▓реВрдкрдордзреНрдпреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡реНрд╣реЕрд▓реНрдпреВ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╢реНрд░реЗрдгреА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛
рд╕рд╛рдареА (рд╕реНрд╡рдпрдВ v = std::рд╡реЗрдХреНрдЯрд░{1, 2, 3}; рд╕реНрд╡рдпрдВ& e : v) {
- рдирд╡реАрди рдордзреНрдпреЗ рдЕреЕрд░реЗ рдЖрдХрд╛рд░рд╛рдЪреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЧрдгрдирд╛ (тАЬрдирд╡реАрди рджреБрд╣реЗрд░реА[]{1,2,3}тАЭ);
- тАЬ[[no_unique_address]]тАЭ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдбреЗрдЯрд╛рд╢рд┐рд╡рд╛рдп рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЬрд╛рдЧрд╛ рдШреЗрдд рдирд╛рд╣реАрдд.
- рдЕрдгреБ рдкреЙрдЗрдВрдЯрд░реНрд╕ (std::Atomic > рдЖрдгрд┐ std::atomic >).
- рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдордзреНрдпреЗ рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдпреЗ рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.
- рддрд╛рддреНрдХрд╛рд│ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЗ рдХреЗрд╡рд│ рд╕реНрдерд┐рд░рд╛рдВрдХрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддрд╛рдд.
consteval int sqr(int n) {
рдкрд░рдд рдХрд░рд╛ n * n;
}constexpr int r = sqr(100); // рдареАрдХ рдЖрд╣реЗ
int x = 100;
int r2 = sqr(x); // рддреНрд░реБрдЯреА: 'x' рд╣рд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА - рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдлрдВрдХреНрд╢рдиреНрд╕рд╕рд╣ constexpr рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ (тАЬconstexpr virtual int f() const { return 2; }тАЭ).
- рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ:
- UTF-8 рд╕реНрдЯреНрд░рд┐рдВрдЧрд╕рд╛рдареА char8_t рдкреНрд░рдХрд╛рд░рд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.
- рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реНрд╕ рдмрд┐рдЯ (рдмрд┐рдЯ рдСрдкрд░реЗрд╢рдиреНрд╕) рдЖрдгрд┐ рдЖрд╡реГрддреНрддреА рдЬреЛрдбрд▓реНрдпрд╛.
- рдЖрддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪрд╛ рдЙрдкрд╕рд░реНрдЧ рдЖрдгрд┐ рдкреНрд░рддреНрдпрдп рддрдкрд╛рд╕рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ (рд╕реНрдЯрд╛рд░реНрдЯреНрд╕_рд╡рд┐рде, рдПрдВрдбреНрд╕_рд╡рд┐рде).
- std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible рдЖрдгрд┐ std::type_identity traits рдЬреЛрдбрд▓реЗ.
- std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated рдЖрдгрд┐ std::assume_aligned рдлрдВрдХреНрд╢рдиреНрд╕ рдЬреЛрдбрд▓реА.
- std::make_shared рдордзреНрдпреЗ рдЕреЕрд░реЗрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.
- рдЕреЕрд░реЗ-рд╕рджреГрд╢ рд╡рд╕реНрддреВ std::array рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА std::to_array рдлрдВрдХреНрд╢рди рдЬреЛрдбрд▓реЗ.
- рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдЧрдгрди рд╡рд╛рдХреНрдпрд░рдЪрдирд╛:
enum рд╡рд░реНрдЧ rgba_color_channel { рд▓рд╛рд▓, рд╣рд┐рд░рд╡рд╛, рдирд┐рд│рд╛, рдЕрд▓реНрдлрд╛ };
std::string_view to_string(rgba_color_channel my_channel) {
рд╕реНрд╡рд┐рдЪ (рдорд╛рдп_рдЪреЕрдиреЗрд▓) {
enum rgba_color_channel рд╡рд╛рдкрд░рдгреЗ;
рдХреЗрд╕ рд▓рд╛рд▓: "рд▓рд╛рд▓" рдкрд░рдд рдХрд░рд╛;
рдХреЗрд╕ рд╣рд┐рд░рд╡рд╛: "рд╣рд┐рд░рд╡рд╛" рдкрд░рдд рдХрд░рд╛;
рдХреЗрд╕ рдирд┐рд│рд╛: "рдирд┐рд│рд╛" рдкрд░рдд рдХрд░рд╛;
рдХреЗрд╕ рдЕрд▓реНрдлрд╛: "рдЕрд▓реНрдлрд╛" рдкрд░рдд рдХрд░рд╛;
}
} - рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдВрдордзреНрдпреЗ, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд░реНрддрдирд╛рдореБрд│реЗ, рдСрдкрд░реЗрд╢рди "," ("a[b,c]") рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рдордирд╛рдИ рдЖрд╣реЗ. рдЕрд╕реНрдерд┐рд░ рдХреАрд╡рд░реНрдбрд╕рд╣ рдШреЛрд╖рд┐рдд рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рд╕рд╣ рдмрд╣реБрддреЗрдХ рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди рдмрдВрдж рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╣ тАЬ++тАЭ рдЖрдгрд┐ тАЬтАФтАЭ рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╣.
- рдкреНрд░рдХрд╛рд░рд╛рдЪреА рдЙрдкрд╕реНрдерд┐рддреА рджрд░реНрд╢рд╡рдгреНрдпрд╛рд╕рд╛рдареА "рдЯрд╛рдЗрдкрдиреЗрдо" рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХреЗрд▓реА.
рд╕реНрддреНрд░реЛрдд: opennet.ru