Rumah >pembangunan bahagian belakang >C++ >Mengapakah Menggunakan Parameter Rujukan `std::array` dalam Fungsi C Menghalang Penilaian Ungkapan Malar?

Mengapakah Menggunakan Parameter Rujukan `std::array` dalam Fungsi C Menghalang Penilaian Ungkapan Malar?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-13 08:02:11262semak imbas

Why Does Using `std::array` Reference Parameters in a C   Function Prevent Constant Expression Evaluation?

Parameter Rujukan dan Ungkapan Malar

Dalam kod C yang disediakan, fungsi concatenate menerima dua parameter rujukan jenis std::array. Walau bagaimanapun, ralat yang dihadapi semasa penyusunan berkaitan dengan fungsi ahli saiz tatasusunan, yang tidak dianggap sebagai ungkapan malar kerana sifat rujukannya.

Menurut piawaian C, teras ungkapan malar ditakrifkan sebagai ungkapan yang tidak menilai kepada:

  • Ungkapan id (iaitu, rujukan) kepada pembolehubah atau ahli data jenis rujukan, melainkan rujukan:

    • Mempunyai pemulaan sebelumnya
    • Boleh digunakan dalam ungkapan malar
    • Jangka hayatnya bermula dalam penilaian ungkapan

Dalam kes ini, parameter rujukan kepada tatasusunan tidak memenuhi mana-mana kriteria ini. Tanpa pemulaan sebelumnya, rujukan tidak boleh dinilai sebagai ungkapan malar.

Oleh itu, oleh kerana fungsi ahli saiz dipanggil pada parameter rujukan (iaitu, data1.size()), ia tidak boleh dianggap sebagai ungkapan malar, yang membawa kepada ralat penyusunan.

Untuk menyelesaikan isu ini, disyorkan untuk menggunakan terus parameter templat S1 dan S2 untuk menentukan saiz tatasusunan hasil dan bukannya bergantung pada fungsi ahli saiz parameter rujukan:

auto result = std::array<uint8_t, S1 + S2>{};

Atas ialah kandungan terperinci Mengapakah Menggunakan Parameter Rujukan `std::array` dalam Fungsi C Menghalang Penilaian 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