Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
[](int x, int y) { return x + y; }
[](int x, int y) -> int { int z = x + y; return z; }
[] //no variables defined. Attempting to use any external variables in the lambda is an error.
[x, &y] //x is captured by value, y is captured by reference
[&] //any external variable is implicitly captured by reference if used
[=] //any external variable is implicitly captured by value if used
[&, x] //x is explicitly captured by value. Other variables will be captured by reference
[=, &z] //z is explicitly captured by reference. Other variables will be captured by value
[=, &x, &y, z](int a, std::vector<int>::const_iterator it) -> int { кусок кода }
Не надо выдавать желаемое за действительное
Я не говорю уж о таких маразмах, как этот, например
это выльется в проблемы связанные с this и прочими указателями
ИМХО это очень правильно что замыкания не делаются неявно. В C# очень раздражает исправлять код за людьми вообще не понимающими что такое замыкания(ведь это так удобно, когда пишешь переменную из лексического контекста, и она подтягивает), ведь последствий этого они не понимают.
в шарпе ситуация другая… Мы врядли когда либо задумаемся о том как и почему происходит замыкание, как оно выглядит в ассемблерном представлении, и какие последствия этого.
какие риски несет C++11
Проблемы статического и динамического линкования со старым кодом С++98
Сравнения скорости компиляции, скорости работы, потребления памяти старого и переписанного на C++11 кода.
void MyClass::print() const
{
for ( auto it = vec.begin(); it != vec.end() ; ++it )
std::cout << *it << " ";
}
void MyClass::print() const
{
for ( std::vector<int>::const_iterator it = vec.begin(); it != vec.end() ; ++it )
std::cout << *it << " ";
}
for (auto i : vec)
std::cout << i << " ";выглядит еще элегантнее.begin и end.
Ещё более современный C++