2011-08-02 18 views
6

ラムダを定義する関数がある場合、関数が呼び出されるたびにlamdaが '構築'されますか?私はそれを防ぐために静的にする必要がありますか?ラムダを静的にする必要がありますか?

void func(int x) 
{ 
    static auto lambda = [&x](int y) -> bool { 
     // ... 
    }; 
} 

答えて

6

いいえ、参照によってローカル変数を取得するため、静的にしないでください。

私はラムダを構築するコストが何であるか分かりません。パフォーマンスの問題であると思われる場合は、ベンチマークを行います。

+0

ああ、そうです。参照によって変数を取得していない場合はどうなりますか? –

+3

ラムダがこれらの心配を保証するのに十分な大きさであれば、それをグローバル関数にしてキャプチャされた値を追加の引数として渡すことができます。 –

+0

@Kerrek SB:それは大きくない、私はちょうど興味があった。 –

関連する問題