Heim >Backend-Entwicklung >C++ >Können statische Arrays zur Kompilierungszeit in C programmgesteuert initialisiert werden?

Können statische Arrays zur Kompilierungszeit in C programmgesteuert initialisiert werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-17 08:02:03380Durchsuche

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

Statische Arrays programmgesteuert zur Kompilierungszeit erstellen

In C können statische Arrays zur Kompilierungszeit initialisiert werden, um bestimmte Werte zu speichern. Betrachten Sie das folgende Beispiel:

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

Frage 1: Werte programmgesteuert zuweisen

Ist es möglich, diese Werte mithilfe von Metaprogrammierungstechniken zur Kompilierungszeit programmgesteuert zuzuweisen?

Antwort:

Mithilfe von C 0x-Funktionen ist es möglich, lokale oder Member-Arrays von Vorlagen zu erstellen und diese aus einer Liste verschiedener Vorlagenargumente zu initialisieren. Dies ist jedoch durch die maximale Instanziierungstiefe der Vorlage begrenzt und möglicherweise für große Arrays nicht praktikabel.

Frage 2: Selektive Zuweisung

Angenommen, bestimmte Array-Elemente sollten das haben Derselbe Wert, während andere variieren. Kann eine selektive Zuweisung programmgesteuert zur Kompilierzeit durchgeführt werden?

Antwort:

Mit einer Vorlagenmetafunktion kann man ein Array von Werten erstellen und verwenden es, um ein statisches Array teilweise zu initialisieren. Im folgenden Beispiel werden Werte basierend auf dem Index selektiv zugewiesen:

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

Durch die Nutzung von Vorlagenmetafunktionen kann eine selektive Zuweisung auf programmatische Weise erreicht werden, während gleichzeitig die Auswertung zur Kompilierungszeit sichergestellt wird.

Das obige ist der detaillierte Inhalt vonKönnen statische Arrays zur Kompilierungszeit in C programmgesteuert initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn