Heim >Backend-Entwicklung >C++ >Können C-Konstruktoren Arrays direkt in Member-Initialisiererlisten initialisieren?

Können C-Konstruktoren Arrays direkt in Member-Initialisiererlisten initialisieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-14 12:59:02508Durchsuche

Can C   Constructors Initialize Arrays Directly in Member Initializer Lists?

Initialisierung von Array-Mitgliedern in Konstruktor-Initialisierungslisten

Die Unfähigkeit, Arrays in Konstruktoren mithilfe von Element-Initialisierungslisten zu initialisieren, wirft Fragen zu den zugrunde liegenden Regeln und möglichen Lösungen.

C 03 Standard- und Aggregatinitialisierung

Der C 03-Standard verbietet die Verwendung der direkten Initialisierung für Aggregattypen, einschließlich Arrays, in Mitgliedsinitialisierungslisten. Direkte Initialisierung bezieht sich auf die direkte Verwendung des Konstruktors mit Klammern, wie in den bereitgestellten Codeausschnitten zu sehen ist.

Boost::array als Lösung

Ein alternativer Ansatz ist die Verwendung eine Struktur, die das Array kapselt. Durch die Definition eines Konstruktors innerhalb der Struktur können Sie das Array bei der Objekterstellung initialisieren. Dies ähnelt dem Ansatz der Boost::array-Bibliothek.

C 11-Listeninitialisierung

C 11 führte die Listeninitialisierung ein, die eine direkte Initialisierung von Aggregaten ermöglicht , einschließlich Arrays, in Member-Initialisierungslisten. Die in der Frage genannte Syntax ist jedoch falsch. Um die Listeninitialisierung zu verwenden, müssen Sie die Array-Elemente in geschweifte Klammern einschließen:

class C
{
public:
    C() : arr{1, 2, 3} {}
};

Diese Syntax initialisiert das arr-Array im Konstruktor korrekt.

Das obige ist der detaillierte Inhalt vonKönnen C-Konstruktoren Arrays direkt in Member-Initialisiererlisten initialisieren?. 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