Gibt es irgendwelche tricks, die Sie verwenden std::cin zur Initialisierung einer const-variable?

Gemeinsame std::cin Nutzung

int X;
cin >> X;

Der größte Nachteil dieser ist, dass X nicht const. Es kann sich leicht vorstellen, bugs, und ich bin auf der Suche nach irgendeinem trick, um der Lage sein, erstellen Sie einen const-Wert, und schreiben Sie es nur einmal.

Die naive Lösung

//Naive
int X_temp;
cin >> X_temp;
const int X = X_temp;

Könnte man natürlich verbessern, indem Sie X, um const&; dennoch sind die original-variable verändert werden können.

Ich bin auf der Suche nach einem kurzen und clevere Lösung, wie dies zu tun. Ich bin sicher, ich bin nicht der einzige, profitieren von einer guten Antwort auf diese Frage.

//EDIT: möchte ich die Lösung einfach erweiterbar auf andere Arten (sagen wir mal, alle PODs, std::string und beweglich-kopierbar Klassen mit trivialen Konstruktor) (wenn es nicht sinnvoll ist, bitte lassen Sie mich wissen in den Kommentaren).

  • ist die variable, die Sie wünschen zu initialisieren einer Klasse?
  • Die ersten zwei Zeilen einer Funktion zurückgeben int 🙂 const int X = read_cin();
  • nicht unbedingt, Nein.
  • Setzen ersten 2 Zeilen deiner Lösung in eine Funktion und zurück X_temp.
  • Ändern const int zu const int& nicht noch etwas verbessern. Zweite ist fast genau das gleiche wie const int * const so werden Sie kopieren sizeof(int*) und in const int Sie kopieren sizeof(int), also wahrscheinlich genau die gleiche Menge an Daten. Mit Verweis auf int hat keinen Sinn - sollten Sie wahrscheinlich nicht verwenden Referenz auf die leb-en.
  • Dies erfordert eine Funktion, die für jede Art, die ich Lesen möchte.
  • Bitte Lesen Sie den zu Bearbeiten.
  • Ich persönlich mag die "naive Lösung", die Sie setzen. Der Wert, den Sie Lesen in der user ist offensichtlich NICHT eine Konstante ist, dann sind Sie ausdrücklich kopieren Sie den Wert in einen anderen Wert was Sie Versprechen wird sich nicht ändern, indem Sie es markieren const. Es ist etwas hässlich, aber scheint genau zu passen, was passiert.
  • Ihre "naive" Lösung ist, wie es getan werden sollte. Niemand profitiert von einer riesigen, bombastischen Klasse Schnittstelle für die Durchführung einer so einfachen, banalen Aufgabe. Wenn Sie finden, sich selbst das schreiben lange, komplizierte Funktionen, nur um eine variable zu setzen, das ist ein Sicheres Zeichen sagen, dass etwas gründlich schief gegangen in das Programm-design.
  • Aber mit der naiven Weise, ich habe zum erstellen einer temp-variable für jede Art werde ich aus dem stream gelesen: string TempString; int TempInt; und so weiter... ich dachte nur, man könnte Kapseln in einer Funktion, so wird es sein, die Unbenannt ist.
  • erfordert eine Funktion, die für jede Art, die ich Lesen möchte." Machen Sie es eine read_cin<int>() dann 🙂

Schreibe einen Kommentar