Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencipta Tatasusunan Berasaskan Sifar Constexpr dalam C 11?

Bagaimana untuk Mencipta Tatasusunan Berasaskan Sifar Constexpr dalam C 11?

Linda Hamilton
Linda Hamiltonasal
2024-12-02 17:22:14843semak imbas

How to Create a Constexpr Zero-Based Array in C  11?

Penjanaan Array Constexpr dalam C 11

Soalan:

Bagaimana kita boleh mencipta constexpr tatasusunan berasaskan sifar sehingga saiz yang ditentukan dalam C 11?

Jawapan:

Dalam C 14, tugasan ini menjadi mudah terima kasih kepada pengenalan pembina dan gelung constexpr. Walau bagaimanapun, dalam C 11, kita perlu menggunakan pendekatan yang lebih rumit.

Pelaksanaan:

  1. Langkah 1: Menggunakan Kelas Templat dengan Constexpr Constructor

    Kami mentakrifkan templat kelas A yang mengambil tatasusunan saiz N sebagai parameter templat. Ia termasuk pembina constexpr yang memulakan arr tatasusunan saiz N.

  2. Langkah 2: Mengisi Array

    Dalam pembina constexpr, kami lelaran sehingga N, memberikan setiap elemen arr indeks yang sepadan. Ini membolehkan kami mengisi tatasusunan dengan jujukan 0 hingga n-1.

  3. Langkah 3: Penggunaan

    Kita boleh membuat instantiate kelas A templat untuk mendapatkan contoh tatasusunan constexpr. Dengan mengakses ahli arrnya, kita boleh berinteraksi dengan elemennya.

Berikut ialah contoh kod yang menunjukkan pendekatan ini dalam C 11:

#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';
}

Kod ini akan mengeluarkan jangkaan 0 hingga 3 jujukan, menunjukkan kejayaan penciptaan tatasusunan berasaskan sifar constexpr dalam C 11.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Tatasusunan Berasaskan Sifar Constexpr dalam C 11?. 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