Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah yang Berlaku kepada Penegasan Statik dalam Cawangan `constexpr if` yang Tidak Diambil?

Apakah yang Berlaku kepada Penegasan Statik dalam Cawangan `constexpr if` yang Tidak Diambil?

DDD
DDDasal
2024-11-27 14:50:14719semak imbas

What Happens to Static Assertions in Untaken `constexpr if` Branches?

Pernyataan Statik dalam Gagal Constexpr if Block

Pengenalan

constexpr jika diperkenalkan dalam C 17 membolehkan kod yang lebih ringkas dan cekap. Walau bagaimanapun, ia juga menimbulkan persoalan mengenai pengendalian pernyataan static_assert dalam blok if ini.

Kegagalan Penegasan Statik dalam Cawangan Tidak Diambil

Teks standard menyatakan bahawa static_assert kenyataan tidak terbentuk dalam cabang pernyataan constexpr if yang tidak diambil. Ini terpakai tidak kira sama ada syarat itu bergantung atau tidak.

Peraturan Dasar

Larangan ini adalah berdasarkan peraturan yang mantap untuk templat, yang menyatakan bahawa program adalah NDR yang tidak betul (tiada diagnostik diperlukan) jika tiada pengkhususan yang sah boleh dijana untuk templat. Static_asserts dengan syarat tidak bergantung yang dinilai sebagai palsu termasuk dalam kategori ini.

Impak terhadap Keselamatan dan Kegunaan

Penghadan ini meletakkan kekangan yang ketara terhadap keselamatan dan kegunaan constexpr jika . Pembangun mesti mengetahui sebarang kemungkinan static_asserts yang mungkin dipanggil dalam cabang pernyataan if yang tidak diambil.

Contoh

Kod berikut disusun tanpa amaran tetapi adalah dianggap tidak berbentuk:

template< typename T>
constexpr void other_library_foo(){
    static_assert(std::is_same<T,int>::value);
}

template<class T>
void g() {
  if constexpr (false)
    other_library_foo<T>(); 
}

Skop Peraturan

Larangan terhadap static_asserts meliputi graf panggilan, jadi sebarang fungsi yang dipanggil dalam cawangan tidak diambil yang mungkin mengandungi static_asserts juga adalah dilarang.

Kesimpulan

Kegagalan static_asserts dalam cabang constexpr yang tidak diambil jika penyataan menyerlahkan keperluan untuk pertimbangan yang teliti apabila menggunakannya dalam templat. Pembangun mesti memastikan bahawa sebarang static_asserts dengan syarat tidak bergantung yang dinilai sebagai palsu tidak dicuba dalam cabang pernyataan if yang tidak diambil.

Atas ialah kandungan terperinci Apakah yang Berlaku kepada Penegasan Statik dalam Cawangan `constexpr if` yang Tidak Diambil?. 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