Heim >Backend-Entwicklung >C++ >Wie initialisiere ich konstante Arrays in C-Klasseninitialisierern, sowohl vor als auch nach C 11?

Wie initialisiere ich konstante Arrays in C-Klasseninitialisierern, sowohl vor als auch nach C 11?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-03 00:26:03606Durchsuche

How do I initialize constant arrays in C   class initializers, both before and after C  11?

Initialisierung von Konstanten-Arrays in Klasseninitialisierern in C

In C kann es eine Herausforderung sein, Arrays als konstante Mitglieder einer Klasse zu deklarieren um sie aufgrund des const-Qualifizierers im Klassenkonstruktor zu initialisieren. In diesem Artikel wird untersucht, wie diese Herausforderung sowohl in Kontexten vor als auch nach C 11 gemeistert werden kann.

Vor C 11:

Vor C 11 wird eine Konstante initialisiert Array in einem Klasseninitialisierer war mit der herkömmlichen Syntax nicht direkt möglich. Es gibt jedoch eine Problemumgehung:

<code class="cpp">class a {
    const int *b;
    int b_size;
    
    // Constructor
    a(const int *b_array, int b_sz)
        : b(b_array), b_size(b_sz) {}
};

int main() {
    int b_array[] {2, 3};
    a a(b_array, sizeof(b_array) / sizeof(int));
    // Proceed with using class 'a'
}</code>

Bei diesem Ansatz wird das Array nicht als direktes Mitglied, sondern als Zeiger mit einem entsprechenden Größenmitglied deklariert. Der Konstruktor wird dann verwendet, um den Zeiger zuzuweisen und zu initialisieren.

Post-C 11:

Mit der Einführung von C 11 erfolgt die Initialisierung von const-Arrays in Klasseninitialisierern wurde einfacher:

<code class="cpp">struct a {
    const int b[2];
    
    // Constructor
    a() : b{2, 3} {}
};</code>

In dieser Syntax ermöglichen die geschweiften Klammern {} unmittelbar nach der Deklaration des Klassenmitglieds die direkte Initialisierung des const-Arrays innerhalb des Konstruktors.

Diese Änderung in C 11 vereinfacht den Prozess der Initialisierung von const-Arrays in Klasseninitialisierern und bietet eine präzisere und elegantere Möglichkeit, solche Klassen zu definieren.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich konstante Arrays in C-Klasseninitialisierern, sowohl vor als auch nach C 11?. 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