Rumah > pembangunan bahagian belakang > C++ > Bolehkah Parameter Rujukan Digunakan dalam Fungsi C Constexpr untuk Ungkapan Malar?

Bolehkah Parameter Rujukan Digunakan dalam Fungsi C Constexpr untuk Ungkapan Malar?

Mary-Kate Olsen
Lepaskan: 2024-11-29 01:54:09
asal
709 orang telah melayarinya

Can Reference Parameters Be Used in C   Constexpr Functions for Constant Expressions?

Parameter Rujukan dalam Fungsi Constexpr dan Ungkapan Malar

Dalam C , ungkapan malar ialah ungkapan yang menilai kepada nilai malar pada penyusunan- masa. Pertimbangkan fungsi constexpr berikut:

template <size_t S1, size_t S2>
auto concatenate(const std::array<uint8_t, S1> &data1,
                 const std::array<uint8_t, S2> &data2)
{
    std::array<uint8_t, data1.size() + data2.size()> result; // Possible error here

    return result;
}
Salin selepas log masuk

Apabila menyusun fungsi ini menggunakan Clang 6.0 dengan -std=c 17, ia gagal untuk menyusun kerana ekspresi data1.size() sedang dinilai pada masa jalan. Ralat ini berlaku hanya apabila parameter adalah rujukan, menunjukkan kemungkinan salah faham tentang kelakuan parameter rujukan dalam fungsi constexpr.

Menurut piawai C ([expr.const]/4), ungkapan ialah teras ungkapan malar jika penilaiannya tidak melibatkan penilaian ungkapan id yang merujuk kepada pembolehubah atau ahli data jenis rujukan melainkan ia mempunyai pemulaan sebelumnya yang sama ada boleh digunakan dalam ungkapan malar atau hayatnya bermula dalam penilaian ungkapan malar teras.

Dalam fungsi yang diberikan, parameter rujukan tidak mempunyai pemulaan terdahulu, menjadikan ungkapan saiz()nya tidak tetap. Oleh itu, ia tidak boleh digunakan dalam ungkapan malar, yang membawa kepada ralat kompilasi.

Untuk menyelesaikan isu dan menggunakan parameter rujukan dalam ungkapan malar, anda hanya boleh menyediakan permulaan sebelumnya atau menggantikan data1.size( ) dengan parameter templat S1.

Atas ialah kandungan terperinci Bolehkah Parameter Rujukan Digunakan dalam Fungsi C Constexpr untuk Ungkapan Malar?. 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