2016-08-30 6 views
10

n4487および他のC++ 17の参照によると、新しいラムダ関数指定子-constexprが存在し、存在する場合はは "関数呼び出し演算子がconstexpr関数であることを明示的に指定します。。私はラムダの絶え間ない表現に対する動機を理解しています。どのような私にとって興味深いのは、述べて提案のポイント4:constexpr指定子がラムダ宣言子、関数呼び出し演算子(またはテンプレート)の中に省略されている場合デフォルトでConstexprラムダ?

4)それはの要件を満たすかどうconstexprですconstexpr機能です。

これは二つの質問に私をリード:

  1. はなぜconstexpr指定が必要なのでしょうか?ラムダコールオペレータがconstexprであるかどうかは、「constexpr関数の要件を満たす」という事実にのみ依存しますが、constexpr指定子の存在からではありません。
  2. デフォルトでラムダがconstexprであれば、他の種類の関数(グローバル関数など)ではなぜそれが提案されないのですか?コンパイラが、要件をカバーするすべての関数をconstexprとして扱い始めると、どのような影響がありますか?

答えて

7
  1. constexpr修飾子はconstexpr機能の要件に違反するラムダのためにそれコンパイルエラーます。あなたは明示的にconstexprであるようにラムダが必要なので、それを間違ってconstexprにしないで使用します。

  2. Asked and answered.

関連する問題