Bolehkah Tatasusunan Statik Dimulakan Secara Program pada Masa Penyusun dalam C?

Susan Sarandon
Lepaskan: 2024-11-17 08:02:03
asal
330 orang telah melayarinya

 Can Static Arrays Be Programmatically Initialized at Compile Time in C  ?

Mencipta Tatasusunan Statik Secara Pengaturcaraan pada Masa Kompilasi

Dalam C , tatasusunan statik boleh dimulakan pada masa penyusunan untuk memegang nilai tertentu. Pertimbangkan contoh berikut:

const std::size_t size = 5;    
unsigned int list[size] = { 1, 2, 3, 4, 5 };
Salin selepas log masuk

Soalan 1: Menetapkan Nilai Secara Pengaturcaraan

Adakah mungkin untuk menetapkan nilai ini secara pengaturcaraan menggunakan teknik pengaturcaraan meta pada masa penyusunan?

Jawapan:

Menggunakan ciri C 0x, adalah mungkin untuk mencipta tatasusunan tempatan atau ahli templat dan memulakannya daripada senarai hujah templat variadic. Walau bagaimanapun, ini dihadkan oleh kedalaman instantiasi templat maksimum dan mungkin tidak praktikal untuk tatasusunan yang besar.

Soalan 2: Tugasan Selektif

Dengan mengandaikan elemen tatasusunan tertentu harus mempunyai nilai yang sama manakala yang lain berbeza-beza, bolehkah tugasan terpilih dilakukan secara pengaturcaraan pada masa penyusunan?

Jawapan:

Menggunakan metafungsi templat, seseorang boleh mencipta tatasusunan nilai dan menggunakan ia untuk memulakan sebahagian tatasusunan statik. Contoh berikut secara selektif memberikan nilai berdasarkan indeks:

template<size_t index> struct MetaFunc { 
    enum { value = index + 1 }; 
};

void test() {
    const std::size_t size = 7;
    typedef generate_array<size, MetaFunc>::result A;

    for (std::size_t i=0; i<size; ++i) { 
        if (i <= 1 || i >= 4) {
            A::data[i] = 0;
        }
    }
}
Salin selepas log masuk

Dengan memanfaatkan metafungsi templat, tugasan terpilih boleh dicapai dalam cara yang terprogram sambil memastikan penilaian masa kompilasi.

Atas ialah kandungan terperinci Bolehkah Tatasusunan Statik Dimulakan Secara Program pada Masa Penyusun dalam C?. 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