Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Fungsi Lambda Digunakan dalam Konteks `constexpr`?

Bolehkah Fungsi Lambda Digunakan dalam Konteks `constexpr`?

DDD
DDDasal
2024-10-31 00:30:29978semak imbas

 Can Lambda Functions Be Used in `constexpr` Contexts?

Sokongan constexpr untuk Fungsi Lambda

sokongan constexpr untuk fungsi lambda telah menjadi topik yang dibincangkan secara meluas dalam komuniti C. Walaupun lambda pada masa ini tidak dibenarkan dalam ungkapan tetap mengikut [expr.const]/(2.6), N4487, yang disertakan dalam draf kerja N4582, bercadang untuk mengalih keluar sekatan ini.

Cadangan lambda- perubahan berkaitan:

  • Benarkan lambda dalam ungkapan tetap.
  • Pertimbangkan jenis penutupan sebagai jenis literal jika semua ahli datanya adalah jenis literal.
  • Jika penentu constexpr diabaikan dalam pengisytihar lambda, operator panggilan fungsi yang dijana dianggap constexpr jika ia memenuhi keperluan fungsi constexpr.

Contoh:

Contoh berikut akan sah setelah N4487 diterima:

<code class="c++">struct Test
{
  static const int value = []() constexpr { return 0; } ();
};</code>

Penyelesaian:

Sebagai penyelesaian sebelum sokongan constexpr ditambahkan secara rasmi, anda boleh menggunakan templat fungsi dan bukannya lambda:

<code class="c++">struct Test
{
  template <typename>
  static const int value = 0;
};</code>

Atas ialah kandungan terperinci Bolehkah Fungsi Lambda Digunakan dalam Konteks `constexpr`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn