Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencipta Tatasusunan Constexpr bagi Unsur N dalam C 11?

Bagaimanakah Saya Boleh Mencipta Tatasusunan Constexpr bagi Unsur N dalam C 11?

DDD
Lepaskan: 2024-12-04 12:17:22
asal
255 orang telah melayarinya

How Can I Create a Constexpr Array of N Elements in C  11?

Mencipta Tatasusunan Constexpr Elemen N dalam C 11

Dalam C 11, mencipta tatasusunan constexpr bagi elemen N tidak semudah dalam versi bahasa kemudian . Walaupun tatasusunan constexpr diperkenalkan dalam C 11, fungsinya adalah terhad dan tidak mungkin untuk mencipta tatasusunan constexpr dengan panjang berubah-ubah menggunakan sintaks yang sama seperti dalam C 14 dan seterusnya.

Walau bagaimanapun, menggunakan beberapa teknik lanjutan dan constexpr, adalah mungkin untuk mencapai hasil yang serupa dalam C 11. Begini caranya:

#include <iostream>

template<int N>
struct A {
    constexpr A() : arr() {
        for (auto i = 0; i != N; ++i)
            arr[i] = i; 
    }
    int arr[N];
};

int main() {
    constexpr auto a = A<4>();
    for (auto x : a.arr)
        std::cout << x << '\n';
}
Salin selepas log masuk

Dalam ini contoh, kami mentakrifkan fungsi constexpr A yang memulakan tatasusunan panjang N dengan nilai 0 hingga N-1. Fungsi ini diisytiharkan sebagai constexpr untuk memastikan bahawa masa pelaksanaannya diketahui pada masa penyusunan.

Dalam fungsi utama, kami mencipta tika A<4> dan cetak nilai tatasusunan. Memandangkan tatasusunan ialah constexpr, pengkompil boleh menentukan nilainya pada masa penyusunan, memastikan tiada pengiraan masa jalan dilakukan untuk tatasusunan.

Pendekatan ini membolehkan kami mencipta tatasusunan constexpr dalam C 11, walaupun sintaks adalah lebih kompleks berbanding dalam versi bahasa yang terkemudian.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Tatasusunan Constexpr bagi Unsur N dalam C 11?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan