am meisten Ärger parse verhindert in-class Initialisierung eines std :: vectorint

8

C ++ 11 ermöglicht die Initialisierung in der Klasse:

%Vor%

Wenn wir in der Klasse einen Vektor von ints initialisieren wollten, würden wir etwas anderes bekommen:

%Vor%

Dieses Problem scheint eine Einschränkung der Sprache zu sein, wie in vorherigen Fragen besprochen . Wenn dies jedoch keine Initialisierung in der Klasse wäre, könnten wir anstelle von geschweiften Klammern Klammern verwenden und das gewünschte Ergebnis erhalten:

%Vor%

Allerdings können wir dies in einer Klasse nicht machen, weil am meisten Ärger macht :

%Vor%

Natürlich ist es fraglich, ob der obige Code eine gute Design-Praxis ist, da wir einfach das, was wir versuchen, in einen Konstruktor verschieben können. Aber abgesehen davon, gibt es eine Möglichkeit, die gewünschte Initialisierung so nah wie möglich an das erste std::string -Beispiel durchzuführen, das ohne Probleme funktioniert?

    
xdavidliu 10.02.2018, 16:33
quelle

1 Antwort

6

Standardmäßige Elementinitialisierungen funktionieren auch mit = . Also

%Vor%

Wird es tun. Natürlich ist die Tatsache, dass wir hier den Typnamen wiederholen, eine große Einschränkung.

Wir können es mit decltype etwas lindern:

%Vor%

Aber das bringt uns immer noch dazu, Dinge zweimal zu benennen.

    
StoryTeller 10.02.2018, 16:36
quelle