Adakah constexpr Mungkin dalam C 11?
Soalan:
Bolehkah C 11 menentukan sama ada ungkapan ialah ungkapan pemalar masa kompilasi (constexpr)?
Jawapan:
Ya, adalah mungkin untuk menghasilkan nilai boolean masa kompilasi berdasarkan penentuan ini menggunakan teknik berikut:
template<typename T> constexpr typename remove_reference<T>::type makeprval(T &&& t) { return t; } #define isprvalconstexpr(e) noexcept(makeprval(e))
Makro ini menyemak sama ada ungkapan e ialah ungkapan pemalar nilai dengan menggunakan operator noexcept. Jika noexcept(makeprval(e)) menilai kepada benar, ungkapan e ialah ungkapan pemalar nilai.
Penjelasan:
Ungkapan pemalar nilai mempunyai sekatan tertentu:
Fungsi makeprval tidak diisytiharkan sebagai noexcept, jadi jika e ialah ungkapan malar nilai, panggilan makeprval(e) akan menjadi ungkapan malar. Oleh itu, pengendali noexcept akan kembali benar.
Keterbatasan:
Makro isprvalconstexpr mempunyai beberapa had:
Atas ialah kandungan terperinci Bolehkah C 11 Menentukan sama ada Ungkapan ialah Pemalar Masa Kompilasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!