ラムダ関数 (C++11およびそれ以降)
![]() | このページは、Google 翻訳を使って英語版から機械翻訳されました。 翻訳には誤りや奇妙な言い回しがあるかもしれません。文章の上にポインタをおくと、元の文章が見れます。誤りを修正して翻訳を改善する手助けをしてください。翻訳についての説明は、ここをクリックしてください。 |
クロージャー、すなわちスコープ内の変数を捕捉することができる無名の関数オブジェクトをの構築する
[編集]構文
[ capture] ( params) mutableexceptionattribute-> ret{ body} | (1) | ||||||||
[ capture] ( params) -> ret{ body} | (2) | ||||||||
[ capture] ( params) { body} | (3) | ||||||||
[ capture] { body} | (4) | ||||||||
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
operator()
の戻り値の型は、次の規則に従って導き出されるoperator()
is deduced according to the following rules:You can help to correct and verify the translation. Click here for instructions.
- bodyが単一return文で構成されている場合は、戻り値の型が返される式(右辺値から左辺値、配列からポインタ、または関数からポインタへの暗黙の型変換後)の一種ですOriginal:if the body consists of the single return statement, the return type is the type of the returned expression (after rvalue-to-lvalue, array-to-pointer, or function-to-pointer implicit conversion)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- そうでなければ、戻り値の型はvoidですOriginal:otherwise, the return type is voidThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
()
だったかのように、関数は、引数を取りません()
You can help to correct and verify the translation. Click here for instructions.
[編集]説明
mutable | - | bodyがコピーによってキャプチャパラメータを変更するには、それらの非constメンバ関数を呼び出すことができます Original: allows body to modify the parameters captured by copy, and to call their non-const member functions The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
exception | - | 閉鎖型の例外仕様またはオペレータ用句をnoexcept()を提供します Original: provides the 例外仕様 or the 句をnoexcept for operator() of the closure type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
attribute | - | 閉鎖型の演算子()の属性指定を提供しています Original: provides the 属性指定 for operator() of the closure type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. {{par | capture |{{tr| 関数が宣言されたスコープで見えるシンボルが関数本体内部が見えるかを指定します。 シンボルのリストは次のように渡すことができます。
A list of symbols can be passed as follows:
|
params | - | 関数の名前のようにパラメータのリスト Original: The list of parameters, as in 関数の名前 The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
ret | - | 型を返します。存在しない場合には、関数のreturn文(またはそれがどのような値を返さない場合には無効)によって暗示だ Original: Return type. If not present it's implied by the function return statements ( or void if it doesn't return any value) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
body | - | 関数本体 Original: Function body The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
You can help to correct and verify the translation. Click here for instructions.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.operator()
You can help to correct and verify the translation. Click here for instructions.
ret operator()(params)const{ body } | (キーワードは可変使用されませんでした) | |
ret operator()(params){ body } | (キーワードは可変使用されていました) | |
Executes the body of the lambda-expression, when invoked. When accessing a variable, accesses its captured copy (for the entities captured by copy), or the original object (for the entities captured by reference). Unless the keyword mutable was used in the lamda-expression, the objects that were captured by copy are non-modifiable from inside this operator().
未解決の参照
If an entity is captured by reference, implicitly or explicitly, and the function call operator of the closure object is invoked after the entity's lifetime has ended, undefined behavior occurs. The C++ closures do not extend the lifetimes of the captured references.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.operator ret(*)(params)
You can help to correct and verify the translation. Click here for instructions.
typedef ret(*F)(params); operator F()const; | ||
This member function is only defined if the capture list of the lambda-expression is empty.
The value returned by this conversion function is a function pointer that, when invoked, has the same effect as invoking the closure object's function call operator directly.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.ClosureType()
You can help to correct and verify the translation. Click here for instructions.
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 ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.operator=()
You can help to correct and verify the translation. Click here for instructions.
ClosureType& operator=(const ClosureType&)= delete; | ||
Closure types are not CopyAssignable.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.~ClosureType()
You can help to correct and verify the translation. Click here for instructions.
~ClosureType()=default; | ||
The destructor is implicitly-declared.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.CapturedParam
You can help to correct and verify the translation. Click here for instructions.
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.
This section is incomplete Reason: scope rules, capture list rules, nested lambdas, implicit capture vs odr use, decltype |
[編集]例
You can help to correct and verify the translation. Click here for instructions.
#include <vector>#include <iostream>#include <algorithm>#include <functional> int main(){std::vector<int> c {1,2,3,4,5,6,7};int x =5; c.erase(std::remove_if(c.begin(), c.end(), [x](int n){return n < x;}), c.end()); std::cout<<"c: ";for(auto i: c){std::cout<< i <<' ';}std::cout<<'\n'; std::function<int(int)> func =[](int i){return i+4;};std::cout<<"func: "<< func(6)<<'\n';}
出力:
c: 5 6 7 func: 10
[編集]参照
自動指定 | 表現(C++11)によって定義された型を指定します Original: specifies a type defined by an expression (C++11) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
(C++11) | 指定された関数呼び出しシグネチャを持つ任意の型の呼び出し可能オブジェクトをラップします Original: wraps callable object of any type with specified function call signature The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (クラステンプレート) |