C ++で[=]はどういう意味ですか?


93

[=]が知りたい?これが短い例です

template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
    return [=] (T input) -> T { return (offset + input) * factor; };
}

auto milesToKm = makeConverter(1.60936, 0.0);

[]代わりにコードはどのように機能し[=]ますか?

と思います

std::function<T (T)>

(T)引数として返され、型を返す関数プロトタイプを意味しますTか?


4
これは、3つの異なる調査されていない質問をするようで、C ++ 11のラムダ式とは何の
underscore_d 2017

私は@underscore_dに同意します-クリックが評価ブーストを行っているようですよね?:)
BitTickler

回答:


108

[=]あなたはを参照しているの一部であるキャプチャリストラムダ式のため。これは、ラムダ式内のコードが初期化され、ラムダが作成時に使用するすべてのローカル変数のコピーを取得するようにC ++に指示します。これは、ラムダ式が関数内のローカル変数であるfactorand を参照できるようにするために必要ですoffset

をで置き換える[=][]、ラムダ式内のコードが変数offsetfactor参照先を認識できないため、コンパイラエラーが発生します。これを行うと、多くのコンパイラが適切な診断エラーメッセージを表示するので、実際に試して何が起こるかを確認してください。


13
「これは必要です」-この正確なオプションは必要ありません。我々はまた書くことができ[&][=offset, =input]など、
MM

1
@MM-それは地元住民への参照をキャプチャしませんか?
役に立たない

5
@MMここで参照キャプチャを使用すると、ラムダが返されるとすぐにこれらのローカル変数のライフタイムが終了するため、問題になります。ただし、個々の変数を個別にリストすることもできます。
templatetypedef

45

それはだラムダキャプチャリスト。変数をラムダで使用できるようにします。[=]値によってどのコピーを使用するか、または[&]参照によって渡すコピーを使用できます。


3
[]何もキャプチャしないものを使用することもできます。:)
Daniel Kamil Kozar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.