1
私はラムダベクターを移動しようとしていますが、私はコンパイルエラーを取得:Visual Studio 2015で一般化されたラムダキャプチャ式:コンパイラのバグまたは正しい動作?
std::vector<int> vec {1,2,3};
auto lambda = [vec2 = std::move(vec)](){
vec2.push_back(1);
}
エラーはエラーC2663です:それが生成され 「2過負荷 『は、この』ポインタのための法的な変換を持っていません」ラインvec2.push_back(1)
に私はそれをコンパイルした作品
std::vector<int> vec {1,2,3};
auto lambda = [vec2 = std::move(vec)](){
auto vec3 = std::move(vec2);
vec3.push_back(1);
}
に例を変更したとき。
この動作は正しいので、そうであれば、なぜvec2
を変更できないのですか?
ラムダコールがconstでないように、 'mutable'を使用してください。 – Zereges
クイック検索([ここ](http://stackoverflow.com/questions/5501959/why-does-c0xs-lambda-require-mutable-keyword-for-capture-by-value-by-defauを参照)の後、 )これは移動キャプチャとは関係がないことがわかりますが、値でキャプチャする場合は常にそうです。非常に奇妙なことに、ラムダを使用しているこのすべての時間の後、私はその動作に遭遇したばかりです。 – Knitschi
mutableキーワードを含むサンプルを回答にコピーして、私はあなたにポイントを与えるでしょう;-) – Knitschi