これはコンパイル:[] mutable {}がコンパイルされないのはなぜですか?
[]{};
だけでなく、この:
[]() mutable {};
しかし、このコードでは、コンパイラは私にエラーメッセージを投げる:
[] mutable {};
^~~~~~~
error: lambda requires '()' before 'mutable'
は、なぜ特定の理由がありますか?
これはコンパイル:[] mutable {}がコンパイルされないのはなぜですか?
[]{};
だけでなく、この:
[]() mutable {};
しかし、このコードでは、コンパイラは私にエラーメッセージを投げる:
[] mutable {};
^~~~~~~
error: lambda requires '()' before 'mutable'
は、なぜ特定の理由がありますか?
文法が標準に書かれているのは単なる結果です。これが監督かどうかわかりません。
ラムダ式はラムダイントロデューサ(括弧)で始まり、その後にオプションのラムダ宣言子が続きます。
ラムダ宣言子には、引数リスト、変更可能な属性、例外指定子、および戻り値の型が含まれています。これらはすべて引数リストを除いてオプションです。したがって、ラムダ宣言者がまったく存在する場合、かっこがそこになければなりません。
これは、可変キーワードを持つことができないためです。
セクション5.1.2 [expr.prim.lambda]をn4296(これはC++ 14の最終草稿)に示します。これは文法から抜け落ちる方法です。 mutable
は、括弧を含むラムダ宣言者でのみ許可されています。ラムダ宣言子全体はオプションです(なぜなら、大括弧を省略することができるからです)。
@BaummitAugen読んで理解する標準はそれ自身のスキルです(特に英語が母国語でない場合)。そのような質問をするのは大丈夫です。 – Slava
@BaummitAugen何か特別な理由がある場合は、標準でそのように指定しています。もしそうでなければ、はい、私はこれを数回遭遇したので、これを変更したいと思います。 –
@RalphTandetzky私は正当な理由、おそらく監督を考えることができません。それを変更する提案を書いてください! – TartanLlama