2016-08-30 29 views
10

n4487 ve diğer C++ 17 referanslarına göre, "işlev çağrısı operatörünün constexpr işlevi olduğunu açıkça belirten yeni bir lambda işlevi belirteci - constexpr olacaktır.". Lambdalarda sürekli ifadeler hakkındaki motivasyonu anlıyorum. constexpr belirteci lambda-Bildiricisi içinde atlanırsa o gereksinimlerini karşılamak olsaydıConstexpr lambda varsayılan olarak mı?

4), işlev çağrısı operatörü (ya da şablon) constexpr geçerli: Benim için ilginç olan devletler teklifin noktası 4'tür constexpr işlevi.

Bu iki soruya götürüyor:

  1. Neden constexpr belirtici gerekiyor? Görünüşe göre, lambda arama operatörü constexpr olsun ya da olmasın, sadece "constexpr işlevinin gereksinimlerini karşılar", ancak constexpr belirteci varlığından değil.
  2. Varsayılan olarak constexpr lambda olması kabul edilebilirse, neden diğer işlev türleri için de önerilmiyor? Örneğin, global işlevler? Derleyici, constexpr gereksinimlerini karşılayan tüm işlevleri ele almaya başlarsa, bu etki ne olur?

cevap

7
  1. constexpr eleme o constexpr fonksiyonların gereksinimleri ihlal lambda için bir derleme hatası yapar. Açıkça 'a ihtiyaç duyduğunuzda, constexpr olması için lambda kullanın, böylece yanlışlıkla constexpr yapmayın.

  2. Asked and answered.

İlgili konular