Merawat Fungsi Perpustakaan Standard Non-constexpr sebagai Constexpr: Analisis Pematuhan
Persoalan timbul sama ada sambungan pengkompil yang merawat standard bukan constexpr perpustakaan berfungsi sebagai constexpr adalah mematuhi. Walaupun piawaian draf C 11 dibenarkan, yang mencadangkan rawatan sedemikian boleh dibenarkan, perkembangan seterusnya telah menjelaskan perkara itu.
C 14 Larangan Eksplisit
Dalam C 14 , draf bahagian standard 17.6.5.6 dengan jelas menyatakan bahawa pelaksanaan tidak boleh mengisytiharkan sebarang tandatangan fungsi perpustakaan standard sebagai constexpr melainkan diperlukan secara eksplisit. Keputusan ini menghalang layanan pematuhan fungsi perpustakaan standard bukan constexpr sebagai constexpr.
Sambungan GCC
GCC telah melaksanakan sambungan yang menganggap fungsi terbina dalam tertentu sebagai constexpr . Walau bagaimanapun, sambungan ini dianggap tidak mematuhi berdasarkan piawaian C 14 yang dikemas kini.
Peraturan Seolah-olah dan Tingkah Laku Boleh Diperhati
Pada mulanya tidak jelas sama ada as- jika peraturan dibenarkan menganggap fungsi bukan constexpr sebagai constexpr. Peraturan seakan-akan membenarkan pelaksanaan menyimpang daripada keperluan piawai selagi ia menghasilkan gelagat yang boleh diperhatikan yang setara. Walau bagaimanapun, mengubah status konstexpr fungsi mempengaruhi tingkah laku yang boleh diperhatikan, seperti yang ditunjukkan oleh ujian SFINAE, yang akan berkelakuan berbeza apabila menggunakan kod yang sama.
Mematuhi Mitigasi
Untuk membuat Mematuhi sambungan GCC, pengkompil perlu mengeluarkan amaran dalam mod pematuhan ketat (mis., -std=c 11 -pedantic) apabila fungsi perpustakaan standard bukan constexpr digunakan dalam konteks constexpr.
Pengecualian Intrinsik
Intrinsik pengkompil tidak diliputi oleh standard dan mungkin dikecualikan daripada peraturan fungsi constexpr. Menggunakan intrinsik terbina dalam (cth., __builtin_cos) sebagai constexpr berpotensi dibenarkan.
Atas ialah kandungan terperinci Adakah Melayan Fungsi Perpustakaan Standard Bukan constexpr sebagai `constexpr` Mematuhi Piawaian C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!