"рд╕реА ++ 11 рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред" - рдмреНрд░реЗрдЬрд╝рди рд╕реНрдЯреНрд░реЙрд╕реНрдЯреНрд░реБрдк
рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ,
рд╣рд░реНрдм рд╕рдЯрд░ рдиреЗ рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдирдпрд╛ рдкреЗрдЬ рдЦреЛрд▓рд╛ -
рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдСрдлрд╝ рдореЙрдбрд░реНрди C ++ рд╕реНрдЯрд╛рдЗрд▓ , рдЬрд╣рд╛рдБ рдЙрдиреНрд╣реЛрдВрдиреЗ рдирдП рдорд╛рдирдХ рдХреЗ рдлрд╛рдпрджреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗред
C ++ 11 рдорд╛рдирдХ рдХрдИ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдХреЗ рдХрд╛рд░рдг C ++ 11 рдХреЛ C ++ 98 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН:
- рд╡реЗ рдирдП рдореБрд╣рд╛рд╡рд░реЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реБрдП рдЖрдкрдХреЗ рдХреЛрдб рдХреА рд╢реИрд▓реА рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рд╡реЗ C ++ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ (рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЙрдирдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди), рд╕рд╛рде рд╣реА рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдмрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
- рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрддрдиреА рдмрд╛рд░ рдФрд░ рддреАрд╡реНрд░рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдк рдЙрдирд╕реЗ рд╣рд░ рджреВрд╕рд░реЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдорд┐рд▓реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдСрдЯреЛ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЛрдб рдХреА рдкрд╛рдВрдЪ рдпрд╛ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ред
C ++ 11 рдХреА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рд▓реЛрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣реИ рдХрд┐ C ++ 11 рдореЗрдВ рд╕реНрд╡рдЪреНрдЫ, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рддреЗрдЬ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ - рдЕрдиреНрдп рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рд╛рдл рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЦреИрд░, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ C ++ рдХрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рд╢реАрд░реНрд╖ рдкрд░ рд╣реИред
рдСрдЯреЛ
рдЬрд╣рд╛рдБ рднреА рд╕рдВрднрд╡ рд╣реЛ, рдСрдЯреЛ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдХреЛ рди рджреЛрд╣рд░рд╛рдПрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдФрд░ рд╕рдВрдХрд▓рдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ:
map<int,string>::iterator i = m.begin();
auto i = begin(m);
-, , , .
binder2nd< greater<int> > x = bind2nd( greater<int>(), 42 );
auto x = [](int i) { return i > 42; };
, auto . - , - . , .
- auto, , , . , тАФ . auto: , ( , , , ).
: delete
. delete ( , ).
тАФ shared_ptr, .
widget* pw = new widget();
:::
delete pw;
auto pw = make_shared<widget>();
(, ), weak_ptr.
class gadget;
class widget {
private:
shared_ptr<gadget> g;
};
class gadget {
private:
weak_ptr<widget> w;
};
, , unique_ptr, . тАЬnew TтАЭ , . unique_ptr.
class widget {
:::
private:
class impl;
unique_ptr<impl> pimpl;
};
class impl {
:::
};
widget::widget()
: pimpl( new impl() )
{
}
, , .
class node {
vector< unique_ptr<node> > children;
node* parent;
public:
:::
};
nullptr
nullptr 0 NULL, , .
int* p = 0;
int* p = nullptr;
for range
for', range, .
for( vector<double>::iterator i = v.begin(); i != v.end(); ++i ) {
total += *i;
}
for( auto d : v ) {
total += d;
}
begin end
begin end , , , STL .begin() .end().
-STL , , .begin() .end(), begin end , , STL. , , C.
vector<int> v;
int a[100];
sort( v.begin(), v.end() );
sort( &a[0], &a[0] + sizeof(a)/sizeof(a[0]) );
sort( begin(v), end(v) );
sort( begin(a), end(a) );
. STL 100. - (
PPL), (
C++ AMP).
: v, x y.
vector<int>::iterator i = v.begin();
for( ; i != v.end(); ++i ) {
if( *i > x && *i < y ) break;
}
auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );
</
source>
- , ? тАФ , , , , , .. .
<source>
lock( mut_x ) {
... use x ...
}
{
lock_guard<mutex> hold { mut_x };
... use x ...
}
lock( mut_x, [&]{
... use x ...
});
. .
Lambdas, Lambdas Everywhere PDC 2010.
Move / &&
API. .
vector<int>* make_big_vector();
:::
vector<int>* result = make_big_vector();
void make_big_vector( vector<int>& out );
:::
vector<int> result;
make_big_vector( result );
vector<int> make_big_vector();
:::
vector<int> result = make_big_vector();
- , , .
: , POD auto, { } .
int a = 42;
auto x = begin(v);
, ( ) , . : ( float int), POD . C++98: , -
rectangle w( origin(), extents() );
complex<double> c( 2.71828, 3.14159 );
int a[] = { 1, 2, 3, 4 };
vector<int> v;
for( int i = 1; i <= 4; ++i ) v.push_back(i);
rectangle w = { origin(), extent() };
complex<double> c = { 2.71828, 3.14159 };
int a[] = { 1, 2, 3, 4 };
vector<int> v = { 1, 2, 3, 4 };
{ } :
X::X( ) : mem1(init1), mem2(init2, init3) { }
X::X( ) : mem1{init1}, mem2{init2, init3} { }
, :
void draw_rect( rectangle );
draw_rect( rectangle( myobj.origin, selection.extents ) );
draw_rect( { myobj.origin, selection.extents } );
C++ . . .
, тАФ must-know. C++, . C++ . C++ , тАФ , .