10
C ++ 11のラムダで、値によるキャプチャにデフォルトで「可変」キーワードが必要なのはなぜですか?
短い例: #include <iostream> int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "\n"; // "10" } 質問:なぜmutableキーワードが必要なのですか?名前付き関数に渡す従来のパラメーターとはかなり異なります。背後にある理論的根拠は何ですか? 値によるキャプチャの全体のポイントは、ユーザーが一時変数を変更できるようにすることだという印象を受けました。それ以外の場合は、ほとんどの場合、参照によるキャプチャを使用した方がよいのではないでしょうか。 悟りはありますか? (ちなみに私はMSVC2010を使用しています。これは標準のはずです)