値によってキャプチャされた値が const であるのに、参照によってキャプチャされたオブジェクトがそうでないのはなぜですか。
int a;
auto compile_error = [=]()
{
a = 1;
}
auto compiles_ok = [&]()
{
a = 1;
}
私にはこれは非論理的に思えますが、標準のように見えますか? 特に、キャプチャされた値の不要な変更は迷惑なバグである可能性がありますが、結果がラムダ スコープに限定される可能性が高いのに対し、参照によってキャプチャされたオブジェクトの不要な変更は、多くの場合、より深刻な影響につながります。
では、デフォルトで const 参照によってキャプチャしてみませんか? または、少なくとも [const &] と [&] をサポートしますか? このデザインの理由は何ですか?
回避策として、値によってキャプチャされた std::cref ラップされた const 参照を使用することになっているのでしょうか?