Welche Auswirkungen hat das Umbrechen einer Initialisierungsliste in Klammern? Ist es einfach ein anderes Formular für die Initialisierung der Liste oder funktioniert es nur in bestimmten Szenarien?Welche Auswirkungen hat das Umbrechen einer Initialisierungsliste in Klammern?
Betrachten wir zum Beispiel a
:
struct A {
A(float a, float b) {}
};
int main()
{
A b(1.0f, 0.0f); // Direct initalization, finds ctor for (float, float)
A c{1.0f, 0.0f}; // List initalization, finds a matching ctor
A a({1.0f, 0.0f}); // Is this list initalization... which is expanded?
}
Diese verdammten impliziten Konstruktoren ... braucht Zeit, sich daran zu gewöhnen. Vielen Dank! – Raginator
@Raginator Kein Problem. Ich habe gerade die Antwort aktualisiert, um auch die Bewegungssemantik einzuschließen, da in diesem Fall der Move-Konstruktor anstelle des Kopierkonstruktors verwendet wird, da es besser passt. – NathanOliver
Obwohl technisch korrekt, wird kein Verschiebungs- oder Kopierkonstruktor aufgerufen, da sie weggelassen werden (sogar obligatorische Kopie Elision in C++ 17). Während in C++ 14 diese Konstruktoren noch zugänglich sein müssen, können sie sogar in C++ 17 gelöscht werden. – Jodocus