Lambdas
-
Hacker schrieb:
Zu meinem nicht, völlig korrekter Code (auch nicht besonders)...
Bitte was?
Hacker schrieb:
Das ist einer der Konzepte (zugriff auf scope-locals).
Was? Ne, eine Lambda hat normalerweise keinen Zugriff auf Scope-lokale Variablen. (Es sei denn, sie werden gecaptured.)
Hacker schrieb:
Außerdem können normale Funktionen genauso auf globals zugreifen.
Ja super, tolles Argument.

-
lufl schrieb:
Was? Ne, eine Lambda hat normalerweise keinen Zugriff auf Scope-lokale Variablen. (Es sei denn, sie werden gecaptured.)
Ich meinte, dass das möglich ist, ist ein Konzept (ja, irgendwie zusammenhanglos...)
Du meinst mit gecaptured sicher das '&' in den Index-Klammern.
auto lambda = [&](){std::cout << a << '\n';};Das mit
zu meinem nicht..
, da meinte ich dass es mich überhaupt nicht überrascht.
-
lufl schrieb:
Hacker schrieb:
Außerdem können normale Funktionen genauso auf globals zugreifen.
Ja super, tolles Argument.

Wo findest du unterscheiden sich Lambdas und normale Funktionen genau?
-
lol

Lambdas sind, im Gegensatz zu Funktionen, Objekte. Solange man also nicht per ref captured, haben Lambdas garantiert keine Seiteneffekte. Oder hätten sie nicht, wenn man nicht die globalen Variablen automatisch drin hätte. Was ich absolut nicht nachvollziehen kann. Eigentlich ziemlich großer Quatsch. Jetzt frage ich mich, was sich die Herren dabei gedacht haben.
-
Sieh mal. Erstens: Lambdas ohne andere Funktionen benutzen zu können ist lächerlich (andere Funktionen: sprich: Alle Funktionen aus der STL-Algorithmus Bibliothek, alle Standard-C Funktionen, ..., aber auch Klassen-Methoden). Allerdings weiß man nicht, ob diese vielleicht auch Globals verwenden. Also würde der Seiteneffekt unbewusst impliziert werden, auch wenn mann das Benutzen von Globals "verbieten" würde.
Oder argumentiere ich falsch
?Also, was ich meine ist, wenn man es syntaktisch verbietet, würde es im Endeffekt keinen Unterschied (außer den blöden Effekt, dass ich Globals eben NICHT VERWENDEN KANN) machen, also jedenfalls keinen positiven.
-
Wenn man in Lambdas keinen Zugriff auf globale Variablen hätte (Dass Zugriff auf Funktionen nötig ist, ist hoffentlich klar), könnte man dein Lambda sehr leicht trotzdem implementieren, mit einer Zeile Code:
#include <iostream> decltype(std::cout)& getCout() {return std::cout;} //(!) auto print = [] (const std::string& s) { getCout() << s << '\n'; }; int main() { print("Hello, Test!"); }Und nu? Das kann man für jede globale Variable machen, also kein Gewinn, wenn man den Zugriff verbietet. Also kann mans auch gleich lassen und den Zugriff erlauben.
-
Das kompiliert zu meinem Erstaunen fehlerfrei. Lambdas haben also freien Zugriff auf globale Variablen. Warum hat man sich dafür entschieden?
Warum sollten sich unbenannte Funktionen anders verhalten als benannte/normale?
Lambdas sind, im Gegensatz zu Funktionen, Objekte.
Konzept und Umsetzung sind zwei verschiedene Dinge.
haben Lambdas garantiert keine Seiteneffekte
Das ist falsch wie du siehst. Sie sollen sich nicht anders als normale Funktionen verhalten.
Was ich absolut nicht nachvollziehen kann. Eigentlich ziemlich großer Quatsch. Jetzt frage ich mich, was sich die Herren dabei gedacht haben.
Sie sollen sich eben genauso wie normale Funktionen verhalten. Das halte ich nicht fuer Quatsch sondern fuer konsistent.
-
Die Standard-Lambdas sind doch eh Müll, meine Lambda-Lib ist viel besser.

-
314159265358979 schrieb:
Die Standard-Lambdas sind doch eh Müll, meine Lambda-Lib ist viel besser.

Wenn denn der Compiler mitspielen würde. Wenn Du die Entwickler wirklich anschreiben solltest, dann sag bitte mal bescheid, was dabei rauskommt. Würde mich interessieren.
PS: Habs gerade im anderen Thread gelesen...
-
Tachyon schrieb:
314159265358979 schrieb:
Die Standard-Lambdas sind doch eh Müll, meine Lambda-Lib ist viel besser.

Wenn denn der Compiler mitspielen würde. Wenn Du die Entwickler wirklich anschreiben solltest, dann sag bitte mal bescheid, was dabei rauskommt. Würde mich interessieren.
PS: Habs gerade im anderen Thread gelesen...
Welchen?
@pumuckl: Ja, genau so meinte ich das.