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
Lepaskan: 2024-12-05 22:35:13
asal
243 orang telah melayarinya

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.
Salin selepas log masuk

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.);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan