Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Mendapat Ralat Pengkompil Apabila Menggunakan `constexpr std::vector` dan `constexpr std::string` dalam C 20?

Mengapa Saya Mendapat Ralat Pengkompil Apabila Menggunakan `constexpr std::vector` dan `constexpr std::string` dalam C 20?

Barbara Streisand
Lepaskan: 2024-12-01 11:48:10
asal
516 orang telah melayarinya

Why Do I Get Compiler Errors When Using `constexpr std::vector` and `constexpr std::string` in C  20?

Vektor dan Rentetan Constexpr dalam C 20: Menyelesaikan Ralat Pengkompil

Apabila cuba mencipta objek constexpr std::string dan std::vector , anda mungkin menghadapi ralat pengkompil yang menunjukkan bahawa ungkapan tidak mempunyai nilai tetap. Walaupun menggunakan versi Microsoft Visual Studio 2019 terkini, yang menyokong rentetan dan vektor constexpr, ralat ini boleh berterusan.

Peruntukan Sementara lwn. Peruntukan Bukan Sementara

Isunya timbul daripada fakta bahawa sokongan peruntukan constexpr dalam C 20 adalah terhad kepada peruntukan sementara. Peruntukan sementara diagihkan pada penghujung penilaian berterusan, menghalang kegigihan peruntukan.

Dalam kes anda, penggunaan std::vector dan std::string melibatkan peruntukan memori dinamik, yang bukan sementara . Oleh itu, pengkompil menandakan ini sebagai pelanggaran sekatan peruntukan sementara.

constexpr std::vector cv{ 1, 2, 3 };
Salin selepas log masuk

Penyelesaian untuk Peruntukan Sementara dalam Constexpr

Untuk menyelesaikan isu ini dan gunakan vektor atau rentetan dalam constexpr, pastikan bahawa peruntukan adalah sementara. Ini bermakna peruntukan memori mesti diagihkan sepenuhnya sebelum penilaian berterusan tamat.

Sebagai contoh, anda boleh menggunakan fungsi untuk melaksanakan peruntukan dalam constexpr, seperti dalam contoh berikut:

constexpr int f() {
    std::vector<int> v = {1, 2, 3};
    return v.size();
}

static_assert(f() == 3);
Salin selepas log masuk

Dalam kes ini, peruntukan vektor adalah sementara kerana memori diagihkan apabila fungsi kembali. Ini membolehkan penggunaan std::vector semasa masa constexpr.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat Pengkompil Apabila Menggunakan `constexpr std::vector` dan `constexpr std::string` dalam C 20?. 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