[C++ピット実録]Lambda値によるキャプチャとarray
642 ワード
背景
環境を学ぶ友达が、私たちを回るつもりで、今日たまたまBugに出会った.
ここでは、コードを簡略化して、いったいどこが問題なのか見てみましょう.
コード#コード#
だから、このコードを実行すると、出力は0、1、2、3になると思います.そうですか.
もし、C arrayの観点から見ると、そう思っても問題ないようですね.
ポインタが値で関数に渡されるように?
でも、実は?
ただし、LambdaがC arrayを値でキャプチャすると、要素はメンバーごとにコピーされます.
だから、最終的な結果は、0、0、0、0...
どうしよう?
私にとってstd::array;
環境を学ぶ友达が、私たちを回るつもりで、今日たまたまBugに出会った.
ここでは、コードを簡略化して、いったいどこが問題なのか見てみましょう.
コード#コード#
int main() {
int collection[5] = {};
auto process = [=]() { //
for(int i : collection)
std::cout << i << " ";
};
for(int i=0; i < 5; ++i)
collection[i] = i;
process();
}
だから、このコードを実行すると、出力は0、1、2、3になると思います.そうですか.
もし、C arrayの観点から見ると、そう思っても問題ないようですね.
ポインタが値で関数に渡されるように?
でも、実は?
ただし、LambdaがC arrayを値でキャプチャすると、要素はメンバーごとにコピーされます.
だから、最終的な結果は、0、0、0、0...
どうしよう?
私にとってstd::array;