Lambda functions (начиная с C++11)
Создает замыкание: безымянный объект-функцию, способный захватывать переменные в контекст.
[править] Синтаксис
[ capture ] ( params ) mutable exception attribute -> ret { body }
|
(1) | ||||||||
[ capture ] ( params ) -> ret { body }
|
(2) | ||||||||
[ capture ] ( params ) { body }
|
(3) | ||||||||
[ capture ] { body }
|
(4) | ||||||||
1) Полное объявление
2) Объявление константной лямбды: объекты, захваченные копированием, не могут быть изменены.
3) Опущен возвращаемый тип в конце: возвращаемый тип замыкания operator()
выводится в соответствии со следующими правилами:
- если body состоит из одного оператора return, то возвращаемый тип является типом возвращаемого выражения (после неявного преобразования rvalue к lvalue, массива к указателю, или функции к указателю)
- В противном случае возвращаемый тип void
4) Пропущен список параметров: функция не принимает аргументов, как если бы список параметров был ()
[править] Объяснение
mutable | - | позволяет body изменять параметры, захваченные копированием, и вызывать их неконстантные функции-члены |
exception | - | обеспечивает спецификацию исключения или опцию noexcept для оператора () типа-замыкания |
attribute | - | обеспечивает спецификацию атрибута для оператора () типа замыкания
Оригинал: provides the attribute specification for operator() of the closure type Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
capture | - | определяет, какие символы, видимые в области объявления функции, будут видны внутри тела функции.
Список символов может быть передан следующим образом:
|
params | - | Список параметров, как в объявлении функции |
ret | - | Возвращаемый тип. Если нет, то он выводится из возвращаемого значения (или void, если функция не возвращает никакого значения) |
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ret operator()(params) const { body } |
(Ключевое слово mutable не было использовано) | |
ret operator()(params) { body } |
(Ключевое слово mutable было использовано) | |
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] "Висячие" ссылкиОригинал:Dangling referencesТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ClosureType ::Оригинал:ClosureType::Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.operator ret(*)(params)
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
typedef ret(*F)(params); operator F() const; |
||
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ClosureType ::Оригинал:ClosureType::Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.ClosureType()
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ClosureType() = delete; |
||
ClosureType(const ClosureType& ) = default; |
||
ClosureType(ClosureType&& ) = default; |
||
Closure types are not DefaultConstructible. The copy constructor and the move constructor are implicitly-declared and may be implicitly-defined according to the usual rules for implicit конструктор копирования and конструктор перемещения.
ClosureType ::Оригинал:ClosureType::Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.operator=()
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
ClosureType& operator=(const ClosureType&) = delete; |
||
Closure types are not CopyAssignable.
ClosureType ::Оригинал:ClosureType::Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.~ClosureType()
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
~ClosureType() = default; |
||
The destructor is implicitly-declared.
ClosureType ::Оригинал:ClosureType::Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.CapturedParam
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
T1 a; T2 b; |
||
If the lambda-expression captures anything by copy (either implicitly with capture clause [=]
or explicitly with a capture that does not include the character &, e.g. [a, b, c]
), the closure type includes unnamed non-static data members, declared in unspecified order, that hold copies of all entities that were so captured.
The type of each data member is the type of the corresponding captured entity, except if the entity has reference type (in that case, references to functions are captured as-is, and references to objects are captured as copies of the referenced objects).
For the entities that are captured by reference (with the default capture [&]
or when using the character &, e.g. [&a, &b, &c]
), it is unspecified if additional data members are declared in the closure type.
Этот раздел не завершён Причина: scope rules, capture list rules, nested lambdas, implicit capture vs odr use, decltype |
Пример
Этот раздел не завершён Причина: нет примера |
[править] См. также
авто спецификатор | определяет тип определяется выражением (C++11)
Оригинал: specifies a type defined by an expression (C++11) Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
(C++11) |
обертывания вызываемый объект любого типа с заданной сигнатурой вызова функции Оригинал: wraps callable object of any type with specified function call signature Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон класса) |