
C++ отримав багато доповнень у C++11, C++14 та C++17. В даний час C++ є зовсім іншою мовою, ніж раніше. У цьому дописі про сучасний C++ пояснюється, як використовувати бібліотеку стандартних шаблонів та найважливіші функції C++17, які значно допоможуть вам писати код, який можна читати, підтримувати та виразити!
Однією з нових можливостей C++11 були лямбда-вирази. У C++11, C++14 і C++17 лямбда-вирази отримали деякі нові доповнення, які зробили лямбда-вираз ще більш потужним.
Якщо ви не знаєте, що таке лямбда-вираз, ось відповідь:
Лямбда-вирази або лямбда-функції конструюють замикання. Замикання — це дуже загальний термін для неіменованих (тимчасових) об’єктів, які можна викликати як функції.
Лямбда-вирази – чудовий спосіб допомогти зробити код загальним і акуратним. Лямбда-вирази можна використовувати як параметри для реальних загальних алгоритмів, щоб спеціалізуватися на досягненні результатів при обробці певних типів, визначених користувачем.
За допомогою лямбда-виразів ми можемо інкапсулювати код, щоб викликати його пізніше та в будь якому місті, оскільки ми можемо їх скопіювати.
Ми також можемо інкапсулювати код, щоб викликати його кілька разів з різними параметрами.
Давайте наведемо реальний приклад:
#ifdef _WIN32 #include <tchar.h> #else typedef char _TCHAR; #define _tmain main #endif #include <iostream> #include <string> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string hello = "C++"; string world = "17"; auto add_things = [](auto a, auto b) { return a + b; }; auto i = add_things(1, 2); auto s = add_things(hello, world); cout << i << endl; cout << s << endl; cout << [](auto a, auto b){ return a + b; }(2, 2) << '\n'; system("pause"); return 0; }
Зверніть увагу на цей рядок:
auto add_things = [](auto a, auto b) { return a + b; };
Це проста у використанні, як і будь-яка інша двійкова функція. Оскільки ми визначили його параметри як автоматичний тип, він працюватиме з усім, що визначає оператор плюс (+), так само, як це роблять рядки.
І тут ми використовуємо лямбда-вираз і друкуємо результат на консоль:
auto i = add_things(1, 2); auto s = add_things(Hello, World); cout << i << endl; cout << s << endl;
Нам не потрібно зберігати лямбда-вираз у змінній, щоб використовувати його. Ми також можемо визначити його на місці, а потім записати параметри в дужках відразу за ним (2, 2):
cout << [](auto a, auto b){ return a + b; }(2, 2) << ‘\n’;
Як бачите, це синтаксис для лямбда-виразів. Найкоротший можливий лямбда-вираз — []{}, він просто не приймає параметрів, нічого не фіксує і, по суті, нічого не робить.