Rumah >pembangunan bahagian belakang >C++ >Bolehkah Penyusun C 14 Melayan Fungsi Perpustakaan Standard Non-constexpr sebagai `constexpr`?

Bolehkah Penyusun C 14 Melayan Fungsi Perpustakaan Standard Non-constexpr sebagai `constexpr`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-05 22:35:13232semak imbas

Can C  14 Compilers Conformingly Treat Non-constexpr Standard Library Functions as `constexpr`?

Memperakui Sambungan Pengkompil untuk constexpr Pengendalian Fungsi Perpustakaan Standard Non-constexpr?

Dalam C 11, draf piawaian kelihatan membenarkan rawatan standard perpustakaan berfungsi sebagai constexpr walaupun ia tidak ditandakan secara eksplisit seperti itu. Walau bagaimanapun, pendirian ini telah berkembang sejak itu.

C 14 Evolution

Dalam C 14, ia secara eksplisit menyatakan bahawa fungsi yang tidak diperlukan standard tidak boleh diisytiharkan sebagai konstexpr oleh pelaksanaan. Ini digariskan dalam bahagian 17.6.5.6 piawaian draf C 14:

An implementation shall not declare any standard library function signature as constexpr except for those where it is explicitly required.

Keputusan ini dibuat untuk mengelakkan percanggahan pelaksanaan, terutamanya dengan penggunaan SFINAE yang membawa kepada tingkah laku yang boleh diperhatikan yang berbeza.

Pelaksanaan GCC

GCC sebelum ini merawat tertentu perpustakaan standard bukan constexpr berfungsi sebagai constexpr berdasarkan resolusi cadangan LWG 2013 yang terdahulu. Walau bagaimanapun, tingkah laku ini tidak lagi dianggap mematuhi C 14.

Ketiadaan Amaran dalam Mod Ketat

Walaupun terdapat ketidakakuran, GCC tidak menjana amaran dalam mod pematuhan ketat ( -std=c 11 -pedantic). Ini berkemungkinan satu kesilapan yang akan ditangani dalam kemas kini masa hadapan.

Pengecualian Intrinsik

Intrinsik pengkompil tidak tertakluk kepada peraturan yang sama seperti fungsi perpustakaan standard. Oleh itu, menggunakan intrinsik seperti:

static constexpr double a = __builtin_cos(3.);

hendaklah dianggap mematuhi.

Kesimpulan

Merawat fungsi perpustakaan standard bukan kontekspr sebagai constexpr pada masa ini lanjutan yang tidak mematuhi C 14. Walaupun GCC membenarkan ini dalam C 11 berdasarkan cadangan terdahulu resolusi, sambungan ini dijangka akan dialih keluar atau diubah suai untuk mematuhi piawaian C 14 semasa.

Atas ialah kandungan terperinci Bolehkah Penyusun C 14 Melayan Fungsi Perpustakaan Standard Non-constexpr sebagai `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