Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Menggunakan Parameter Fungsi dalam Fungsi `constexpr` sebagai Ungkapan Malar?

Mengapa Saya Tidak Boleh Menggunakan Parameter Fungsi dalam Fungsi `constexpr` sebagai Ungkapan Malar?

Mary-Kate Olsen
Lepaskan: 2024-11-22 00:28:14
asal
541 orang telah melayarinya

Why Can't I Use a Function Parameter in a `constexpr` Function as a Constant Expression?

Tidak Boleh Menggunakan Parameter Fungsi bagi Fungsi constexpr dalam Ungkapan Malar

Coretan kod yang disediakan menunjukkan fungsi constexpr make_const dan fungsi t1 yang cuba menggunakan make_const dengan ungkapan tidak tetap. Ini menimbulkan ralat kerana i dalam t1 bukan ungkapan malar.

Fungsi constexpr, apabila diberikan hujah malar, boleh dinilai pada masa penyusunan. Walau bagaimanapun, jika parameter bukan constexpr dihantar kepada fungsi constexpr, ia tidak menjadikan parameter itu sebagai ungkapan malar.

Dalam kod di bawah, t1 ialah fungsi constexpr, tetapi make_const(i) di dalam t1 ialah bukan ungkapan malar kerana i bukan pemalar:

constexpr int t1(const int i)
{
    return make_const(i);
}
Salin selepas log masuk
Salin selepas log masuk

Kod yang dikemas kini menunjukkan bahawa t1 boleh diisytiharkan sebagai constexpr dan mengembalikan hasil daripada make_const:

constexpr int t1(const int i)
{
    return make_const(i);
}
Salin selepas log masuk
Salin selepas log masuk

Walau bagaimanapun, kod di bawah masih akan mengakibatkan ralat kerana do_something() bukan ungkapan tetap:

template<int i>
constexpr bool do_something(){
    return i;
}

constexpr int t1(const int i)
{
    return do_something<make_const(i)>();
}
Salin selepas log masuk

Untuk meringkaskan , parameter fungsi constexpr mestilah ungkapan malar. Jika parameter bukan malar diluluskan, ia tidak menjadi ungkapan malar dalam fungsi constexpr.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Parameter Fungsi dalam Fungsi `constexpr` sebagai 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