Rumah >pembangunan bahagian belakang >C++ >Bolehkah Penyusun C 14 Melayan Fungsi Perpustakaan Standard Non-constexpr sebagai `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!