Dies kann als Off-Topic gesehen werden, aber der Titel dieser Frage kam in meiner Web-Suche bei der Suche nach einem Weg, um einen Wert aus einer {}
blockieren. Dann wurde mir klar, wie man das mit Standard-C++-Konstrukten machen kann. Ich poste dies für die nächste Person, die aus demselben Grund hier landet.
Um aufzugreifen, was @BRPocock sagte vor 8 Jahren, dass es ist möglich, einen Wert aus einem "anonymen Bereichsoperator" / "lexikalischen Gehäuse" zurückzugeben - verwenden Sie daher ein {}
Blocks als Teil eines Ausdrucks - durch die Verwendung von Lambda-Funktionen .
(Historische Anmerkung: Alle Bindungsformen in Lisp können in Form von Makros mit Lambda-Ausdrücken geschrieben werden. Von Lisp stammt der moderne Begriff "Lambda-Funktion". Lisp war 1959 John McCarthys prozedurale Verkörperung des theoretischen "Lambda-Kalküls" von Church und Turning).
Zurück zu C++, dies ist eine minimale anonyme Lambda-Funktion, ohne lexikalische Erfassung, ohne Argumente und mit leerem Körper:
[](){}
Dies ist die Funktion, die auf keine Argumente angewendet wird:
[](){}()
Hier ist der Funktionsaufruf mit einigen Anweisungen in seinem Körper:
[](){ int i=2; int j=3; return i+j; }()
Drumherum gibt es einige zusätzliche "Dinge" (die pourrait mit einem Makro gekapselt werden) und erfordert die ausdrückliche Verwendung von return
aber es erfüllt die grundlegende Funktion der Rückgabe eines Wertes aus einer {}
Block. Zum Beispiel wird hier 5 gedruckt:
std::cout << [](){ int i=2; int j=3; return i+j; }() << std::endl;