рдЕрдкреНрд░реИрд▓ рдореЗрдВ, рдмреНрд░рд┐рд╕реНрдЯрд▓ рдореЗрдВ C ++ рд╕рдорд┐рддрд┐ рдХреА рдПрдХ рдмреИрдардХ рд╣реБрдИ, рдЬрд┐рд╕рдореЗрдВ рдирдП C ++ 14 рдорд╛рдирдХ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЗрд╕ рдмреИрдардХ рдореЗрдВ рдЕрдиреБрдореЛрджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдП рдорд╛рдирдХ (N3690 рджрд┐рдирд╛рдВрдХ 15 рдордИ, 2013) рдХреЗ рдорд╕реМрджреЗ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдореНрдорд╛рди рдХреА рдЬрдЧрд╣ рд▓реЗ рд░рд╣реЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реВрдЪреА:
- рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
- рдХреИрдкреНрдЪрд░-рдмрд╛рдп-рдореВрд╡ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд▓реИрдореНрдмреНрдбрд╛ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреА рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
- рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд (рдмрд╣реБрд░реВрдкреА) рд▓рдВрдмреЛрджрд░ рднрд╛рд╡
constexpr
рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдкрд░ рд╕рд░рд▓реАрдХреГрдд рдкреНрд░рддрд┐рдмрдВрдз- рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЯреЗрдореНрдкрд▓реЗрдЯ
exchange
make_unique
- рдЕрд▓рдЧ рд▓рд╛рдЗрди
- рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╕рд╛рд╣рд┐рддреНрдп
optional
shared_mutex
рдФрд░ shared_lock
dynarray
рднрд╛рд╖рд╛ рдореЗрдВ рд╣реА рдмрджрд▓рд╛рд╡ рдЖрддрд╛ рд╣реИ
рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
C ++ 11 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░, рднрд╛рд╖рд╛ рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ
return
рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ, рддреЛ рдЖрдк рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рд▓реЛрдЧ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдереЗ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ C ++ 11 рдХреА рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдкрд╣рд▓реЗ рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдм, рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдорд╛рдирдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд╛рде рд╣реА, рдЗрд╕ рд╕рдВрд╢реЛрдзрди рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдХрдИ
return
рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рднреА рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХреЗрд╕ рд╕рд╣рд┐рдд рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рд╡реИрд▓реНрдпреВ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
auto iterate(int len)
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рдХреА рдХреБрдЫ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ:
рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХреЛ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рддреЛ рдЬрдм рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЯрд╛рдЗрдк рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛:
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд╛рдж рдореЗрдВ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдореБрдЦреНрдп, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рдирдП рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрдиред
рдорд╛рдирдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдФрд░ рдкреНрд░рдХрд╛рд░
std::initializer_list
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд╖реЗрдзред
рдХреИрдкреНрдЪрд░-рдмрд╛рдп-рдореВрд╡ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд▓реИрдореНрдмреНрдбрд╛ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреА рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
C ++ 11 рдореЗрдВ, рд▓реИрдореНрдмреНрдбрд╛ рдХреИрдкреНрдЪрд░-рдмрд╛рдп-рдореВрд╡ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
#include <memory> #include <iostream> #include <utility> template <class T> void run(T&& runnable) { runnable(); }; int main() { std::unique_ptr<int> result(new int{42}); run([result](){std::cout << *result << std::endl;}); }
рдХрд┐рд╕реА рдлрдВрдХреНрд╢рди рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкреНрд░рдЪрд▓рд┐рдд рдСрдЯреЛ_рдкреНрд░рдЯрд░ рдЬреИрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╡рд░рдг рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреИрдкреНрдЪрд░-рдЯреВ-рдореВрд╡ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдЪрд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЖрд░рдВрдн рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
[ x { move(x) }, y = transform(y, z), foo, bar, baz ] { ... }
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
x
рдХреЛ
x
рд▓реЗ рдЬрд╛рдХрд░ рд╕реАрдзреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреЙрд▓
transform
рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ
y
рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдмрд╛рдХреА рдХреЛ рд╡реИрд▓реНрдпреВ рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
int x = 4; auto y = [&r = x, x = x+1]()->int { r += 2; return x+2; }();
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдирд┐рд╖рд┐рджреНрдз рдирд╣реАрдВ рд╣реИ:
[int x = get_x()] { ... } [Container y{get_container()}] { ... } [int z = 5] { ... }
рдХрдИ рд▓реЛрдЧ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:
[&&x] { ... }
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд▓рд┐рдВрдХ рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓реЗ рдЧрдП, рддреЛ рдЖрдВрджреЛрд▓рди рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдЕрдм рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЪрд░ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд▓реИрдореНрдмрдбрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВред
рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд (рдмрд╣реБрд░реВрдкреА) рд▓рдВрдмреЛрджрд░ рднрд╛рд╡
C ++ 11 рдореЗрдВ, рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдПрдХ рдРрд╕реА рдХрдХреНрд╖рд╛ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдСрдкрд░реЗрдЯрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд╢реЛрдзрди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ:
auto
рдЯрд╛рдЗрдк рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХ рдЕрд░реНрде рдЬреЗрдиреЗрд░рд┐рдХ (рдЯреЗрдореНрдкреНрд▓реЗрдЯ) рд▓реИрдореНрдмрдбрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ- рд▓рдВрдмреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ рдЬреЛ рдореВрд▓реНрдп рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди-рдкреЙрдЗрдВрдЯрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╣реА рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
void f1(int (*)(int)) { } void f2(char (*)(int)) { } void g(int (*)(int)) { }
рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓рд┐рдВрдХ рдФрд░
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде, рддрд░реНрдХ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ (рдЪрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ) рдХреЗ рд╕рд╛рде, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛:
auto vglambda = [](auto printer) { return [=](auto&& ... ts) {
constexpr
рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдкрд░ рд╕рд░рд▓реАрдХреГрдд рдкреНрд░рддрд┐рдмрдВрдз
рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ
constexpr
рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐
constexpr
рд╣реИ:
- рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШреЛрд╖рдгрд╛ (
static
, thread_local
рдФрд░ thread_local
рдЪрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░) if
рдФрд░ switch
(рд▓реЗрдХрд┐рди goto
рдирд╣реАрдВ)for
(рд░реЗрдВрдЬ рдЖрдзрд╛рд░рд┐рдд рдХреЗ for
рд╕рд╣рд┐рдд), while
рдФрд░ do-while
constexpr
рдЧрдгрдирд╛ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди
constexpr int abs(int x) { if (x < 0) x = -x; return x;
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдирд┐рдпрдо рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ
constexpr
рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ (рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ) рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред
рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЯреЗрдореНрдкрд▓реЗрдЯ
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ
constexpr
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП
constexpr
рд╡реЗрд░рд┐рдПрдмрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (рдпрд╣ рди рдХреЗрд╡рд▓ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде):
template<typename T> constexpr T pi = T(3.1415926535897932385); template<typename T> T circular_area(T r) { return pi<T> * r * r; } struct matrix_constants { template<typename T> using pauli = hermitian_matrix<T, 2>; template<typename T> constexpr pauli<T> sigma1 = { { 0, 1 }, { 1, 0 } }; template<typename T> constexpr pauli<T> sigma2 = { { 0, -1i }, { 1i, 0 } }; template<typename T> constexpr pauli<T> sigma3 = { { 1, 0 }, { -1, 0 } }; };
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди
exchange
рдкрд░рдорд╛рдгреБ рд╡рд╕реНрддреБрдПрдВ рдПрдХ
atomic_exchange
рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди
atomic_exchange
рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдирдпрд╛ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдкреБрд░рд╛рдирд╛ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реИред рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- рдпрджрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд╛рд▓ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдкреБрд░рд╛рдиреА рд╡рд╕реНрддреБ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ
- рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЛ рдирдП рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, рдХрд┐рд╕реА рднреА рд░реВрдкрд╛рдВрддрд░рдг рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдн рдЙрдард╛рдПрдВ
- рдпрджрд┐ рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рд╣реИ рдпрд╛ рдпрд╣рд╛рдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рдирдИ рд╡рд╕реНрддреБ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
std::unique_ptr::reset
рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
std::unique_ptr::reset
:
template<typename T, typename D> void unique_ptr<T, D>::reset(pointer p = pointer()) { pointer old = ptr_; ptr_ = p; if (old) deleter_(old); }
рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
template<typename T, typename D> void unique_ptr<T, D>::reset(pointer p = pointer()) { if (pointer old = std::exchange(ptr_, p)) deleter_(old); }
make_unique
C ++ 11 рдореЗрдВ, рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде,
make_shared
рдЬреИрд╕рд╛ рдПрдХ рдлрдВрдХреНрд╢рди
make_shared
ред рдпрд╣ рдЖрдкрдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЗ рдЖрд╡рдВрдЯрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐,
unique_ptr
рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдЕрдиреБрдХреВрд▓рди рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдврд╝реА рд╣реБрдИ рд╕реБрд░рдХреНрд╖рд╛ рдХрднреА рднреА рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ, рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдПрдХ рдореЗрдореЛрд░реА рд▓реАрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рджреВрд╕рд░реА рд╡рд╕реНрддреБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдИ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ
unique_ptr
рдореЗрдВ рдирд╣реАрдВ рд░рдЦреА рдЧрдИ рд╣реИ:
void foo(std::unique_ptr<A> a, std::unique_ptr<B> b); int main() { foo(new A, new B); foo(std::unique_ptr<A>{new A}, foo(std::unique_ptr<B>{new B}); }
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
make_unique
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, C ++ 14 рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ (рдмрд╣реБрдд рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ
new
рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ
delete
рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
#include <iostream> #include <string> #include <memory> using namespace std; void foo(std::unique_ptr<string> a, std::unique_ptr<string> b) {} int main() { cout << *make_unique<int>() << endl; cout << *make_unique<int>(1729) << endl; cout << "\"" << *make_unique<string>() << "\"" << endl; cout << "\"" << *make_unique<string>("meow") << "\"" << endl; cout << "\"" << *make_unique<string>(6, 'z') << "\"" << endl; auto up = make_unique<int[]>(5); for (int i = 0; i < 5; ++i) { cout << up[i] << " "; } cout << endl; foo(make_unique<string>(), make_unique<string>()); // auto up1 = make_unique<string[]>("error"); // auto up2 = make_unique<int[]>(10, 20, 30, 40); // auto up3 = make_unique<int[5]>(); // auto up4 = make_unique<int[5]>(11, 22, 33, 44, 55); // } /* Output: 0 1729 "" "meow" "zzzzzz" 0 0 0 0 0 */
рдЕрд▓рдЧ рд▓рд╛рдЗрди
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬрд┐рд╕рдореЗрдВ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд╛рди рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рд╣рдореЗрд╢рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
std::stringstream ss; std::string original = "foolish me"; std::string round_trip; ss << original; ss >> round_trip; std::cout << original;
рдпрд╣ рд╕рдВрд╢реЛрдзрди рдорд╛рдирдХ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рд▓рд┐рдЦрдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдореЗрдВ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЬреЛрдбрд╝рдХрд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
std::stringstream ss; std::string original = "foolish me"; std::string round_trip; ss << quoted(original); ss >> quoted(round_trip); std::cout << original;
рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рднреА рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
std::cout << "She said \"Hi!\"";
рдпрд╣ рд╕рдВрд╢реЛрдзрди
рдмреВрд╕реНрдЯ рдХрд╛рдЙрдВрдЯрд░рдкрд╛рд░реНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд
рд╣реИ ред
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╕рд╛рд╣рд┐рддреНрдп
рд╕реА ++ 11 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢рд╛рдмреНрджрд┐рдХ (рдкреАрдПрд▓) рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рднреА рдкреАрдПрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЧреИрд░-рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреАрдПрд▓ рдХреЗ рдирд╛рдо рдПрд╕рдЯреАрдПрд▓ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВред
рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╢реЛрдзрди рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
basic_string
рд▓рд┐рдП s
рдСрдкрд░реЗрдЯрд░- рдЪрд╛рд░рдгреЛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░
h
, min
, s
, ms
, us
, ns
:: рдЕрд╡рдзрд┐
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
auto mystring = "hello world"s;
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
optional
рдпрд╣ рд╕рдВрд╢реЛрдзрди рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╕реНрддреБ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рд╕рдВрднрд╡ рдЙрдкрдпреЛрдЧ:
- рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ
- рдЕрд╢рдХреНрдд рдЕрд╡рд╕реНрдерд╛ (рдирд┐рдпрдорд┐рдд (рдХрдЪреНрдЪреЗ) рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
- рдЖрд░рдПрдЖрдИрдЖрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
- рдорд╣рдВрдЧреА (рдорд╛рдирдХ) рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рдЙрдкрдпреЛрдЧ рдХреА рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╡рд┐рдзрд┐:
optional<int> str2int(string);
рдпрд╣ рд╕рдВрд╢реЛрдзрди
рдмреВрд╕реНрдЯ рдХрд╛рдЙрдВрдЯрд░рдкрд╛рд░реНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд
рд╣реИ ред
рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦрдХ рдХреЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
shared_mutex
рдФрд░ shared_lock
рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХрднреА-рдХрднреА рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХреЗ рдпрд╛ рдЕрджреНрд╡рд┐рддреАрдп рд▓реЗрдЦрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рд╕рдВрд╢реЛрдзрди рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдорд╛рдирдХ
shared_mutex
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
lock
рдлрд╝рдВрдХреНрд╢рди рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣реБрдВрдЪ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝реЗ рдЧрдП
lock_guard
рдФрд░
unique_lock
рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рдЭрд╛ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
lock_shared
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ RAII
shared_lock
рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:
using namespace std; shared_mutex rwmutex; { shared_lock<shared_mutex> read_lock(rwmutex);
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд▓реЙрдХ рдХреА рд▓рд╛рдЧрдд, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдорд┐рдд рдореНрдпреВрдЯреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИред
рдпрд╣ рд╕рдВрд╢реЛрдзрди
рдмреВрд╕реНрдЯ рдХрд╛рдЙрдВрдЯрд░рдкрд╛рд░реНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд
рд╣реИ ред
dynarray
рд╡рд░реНрддрдорд╛рди рд╕реА рдорд╛рдирдХ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЖрдХрд╛рд░ рдХреЗрд╡рд▓ рд░рди рд╕рдордп рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рддрд░рд╣, рд╡реЗ рдЬреЛ рдбреЗрдЯрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рд╡рд╣ рд╕реНрдЯреИрдХ рдкрд░ рд╣реЛрддрд╛ рд╣реИред C ++ 14 рдРрд╕реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреА рддрд░рд╣ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд╕рд░рдгреА рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ -
std::dynarray
, рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдХреЛ рднреА рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрд╛ рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдвреЗрд░ рдкрд░ рд░рдЦреЗрдВ, рдЬрдмрдХрд┐
std::array
рдФрд░
std::vector
рд╕рдорд╛рди рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рд╕рдВрд╢реЛрдзрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореВрд▓ рд░реВрдк рд╕реЗ, C ++ 14 рдХреЛ рдПрдХ рдорд╛рдореВрд▓реА рдмрдЧ-рдлрд┐рдХреНрд╕ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрд┐рдП рдЧрдП C ++ 11 рдХреА рдХрдорд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рд╕реА ++ рдорд╛рдирдХ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдорд╕реМрджрд╛
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЕрджреНрдпрддрди:dynarray
рдФрд░
optional
рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрдХрдиреАрдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рдирдИ C ++ 14 рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди: рднрд╛рдЧ 2