Ich möchte zwei Variablen desselben Typs deklarieren und den Compiler die Typen herausfinden lassen. Ich möchte jedoch eine der Variablen erst später initialisieren. Ich denke nicht, dass ich auto
hier verwenden kann, also was ist die beste Option?
Was ist der beste Weg, dem Compiler mitzuteilen, dass end
vom selben Typ sein soll wie start
, aber ohne die Variable initialisieren zu müssen?
Aktualisieren
Ein paar Kommentare haben Wege vorgeschlagen, die in bestimmten Situationen funktionieren würden, daher erläutere ich meine Situation hier:
%Vor% Ich glaube, eine Lambda-Funktion wäre hier schwieriger, weil amount
auf 0
zurückgesetzt wird, nachdem end
berechnet wurde, also in einer Lambda-Funktion, die einen Wert für end
, amount = 0
berechnet um nach der return
Aussage zu kommen. Die einzige Möglichkeit wäre, mehr lokale Variablen zu erstellen, was eine (zugegebenermaßen winzige) Leistungseinbuße zur Folge hätte.
Mein persönlicher Ansatz wäre, ein Lambda an Ort und Stelle zu nennen:
%Vor% Wenn der automatische Rückgabetypabzug für das Lambda aus irgendeinem Grund fehlschlägt (z. B. gibt es mehrere return
-Anweisungen), ersetzen Sie einfach [&]{
durch [&]() -> decltype(start) {
.
Bearbeiten:
%Vor%Ich denke eine nicht initialisierte Variable ist hier eine vorzeitige Optimierung. Ich würde die Variable initialisieren und nur dann eine Optimierung in Erwägung ziehen, wenn ich Beweise dafür habe, dass dies Auswirkungen hat.
%Vor%Hier ist ein Beispiel mit dem guten alten ternären Operator (auch von @ 5gon12eder erwähnt). In solch einem einfachen Fall ist es die beste verständliche IMHO und vermeidet auch die Probleme von nicht initialisierten Variablen, auf die @ildjarn hingewiesen hat.
%Vor%Ist es nicht übertrieben das Problem? Gehen Sie entweder zu Ihrer ersten Intuition:
%Vor% Oder auto
- initialisieren Sie die end
Variable mit v.end()
und löschen Sie die else
Klausel in Ihrem Democode. So einfach ist das:
Die Kosten für die Initialisierung oder Zuweisung eines Iterators sollten im Vergleich zu den Wartungs- / Lesbarkeitskosten ohnehin vernachlässigbar sein.