Mit der Einführung von C 11 erhielten Entwickler einen neuen Satz Syntaxoptionen für die Initialisierung von Klassen, die die bereits vorhandenen ergänzen In Klammern eingeschlossener Initialisierer. Diese Fülle an Auswahlmöglichkeiten hat zu einem rätselhaften Dilemma geführt: Wann sollte jede Syntaxoption verwendet werden?
Die bereitgestellte Richtlinie legt nahe, dass die Absicht darin besteht, einem Objekt einen genauen Wert zuzuweisen , sollte die Kopierinitialisierung (=) bevorzugt werden. Dies liegt daran, dass dadurch das Risiko minimiert wird, versehentlich einen expliziten Konstruktor mit möglicherweise unterschiedlicher Semantik aufzurufen. Die Initialisierung in Klammern sollte in Betracht gezogen werden, wenn die Kopierinitialisierung nicht verfügbar ist, und die Initialisierung in Klammern sollte als letztes Mittel verwendet werden.
Die Initialisierung in geschweiften Klammern eignet sich hervorragend, wenn mit mehreren Werten initialisiert wird im Objekt gespeichert werden. Diese Syntax eignet sich besonders für Vektoren, Arrays und komplexe Zahlen.
Wenn die während der Initialisierung bereitgestellten Werte den beabsichtigten Zustand oder das beabsichtigte Verhalten des Objekts beschreiben und nicht seine tatsächlichen Daten , Klammerinitialisierung sollte verwendet werden. Dies ist häufig bei Argumenten der Fall, die Größe oder Dateinamen angeben.
Bedenken Sie die folgenden Codeausschnitte:
{ // Example 1
int b(1); // Copy initialization for exact value
int a{1}; // Brace initialization for stored value
int c = 1; // Parentheses initialization for descriptor value (e.g., size)
int d = {1}; // Brace initialization for stored value
}
{ // Example 4
std::function a(std::plus()); // Copy initialization for callback function
std::function b{std::plus()}; // Brace initialization for callback function, likely unwanted
}
Durch Befolgen der vorgeschlagenen Richtlinie können Entwickler die Komplexität der C 11-Initialisierersyntax sicher bewältigen und sicherstellen, dass ihr Code sowohl genau als auch effizient ist.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3