Rumah >pembangunan bahagian belakang >C++ >Bolehkah saya Menggunakan std::string dalam Ungkapan Malar?
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!