web-dev-qa-db-ja.com

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

[=]が何をするのか知りたいですか?ここに短い例があります

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?型を返す関数プロトタイプを意味しますか?

88
der_lord

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

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

102
templatetypedef

lambda キャプチャリストです。ラムダで変数を使用可能にします。値でコピーする[=]、または参照で渡す[&]を使用できます。

40
kometen