Rumah >pembangunan bahagian belakang >C++ >Bolehkah saya Menggunakan std::string dalam Ungkapan Malar?

Bolehkah saya Menggunakan std::string dalam Ungkapan Malar?

Susan Sarandon
Susan Sarandonasal
2024-11-23 16:29:15498semak imbas

Can I Use std::string in Constant Expressions?

Menggunakan std::string dalam Ungkapan Malar

Pembolehubah Constexpr ialah komponen penting C moden, menawarkan resolusi masa kompilasi untuk ungkapan kompleks . Walau bagaimanapun, disebabkan oleh keperluan ketat mereka, menggunakan std::string dalam konteks constexpr telah menjadi masalah sejarah.

Dalam C 11, percubaan untuk mentakrifkan std::string malar, seperti yang ditunjukkan dalam coretan kod yang disediakan, hasil dalam kesilapan penyusunan. Penjelasannya terletak pada pemusnah bukan remeh std::string, yang menghalangnya daripada dianggap sebagai jenis literal.

C 20 dan C 17 Solutions

Mujurlah , C 20 memperkenalkan penyelesaian kepada dilema ini. Jika std::string dipastikan akan dimusnahkan sebelum penilaian berterusan berakhir, ia menjadi sah untuk digunakan dalam constexpr. Walaupun contoh dalam pertanyaan asal kekal tidak sah, kod seperti menentukan saiz std::string yang dicipta daripada literal rentetan bukan malar (seperti yang digambarkan dalam jawapan) berjaya disusun.

Selain C Penambahbaikan 20-an, C 17 menghasilkan std::string_view. Objek seperti rentetan ini memberikan rujukan tidak berubah kepada jujukan aksara sedia ada tanpa memiliki atau mengubah suainya. Mentakrifkan constexpr std::string_view, seperti yang ditunjukkan dalam jawapan, menyelesaikan masalah menggunakan rentetan aksara dalam ungkapan malar.

Melalui penyelesaian ini, kedua-dua C 20 dan C 17 meningkatkan ekspresif dan kuasa constexpr dengan ketara dalam pengaturcaraan C moden.

Atas ialah kandungan terperinci Bolehkah saya Menggunakan std::string dalam Ungkapan Malar?. 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