Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  Lambdas  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
lulf
Unregistrierter




Beitrag lulf Unregistrierter 22:08:27 12.04.2012   Titel:   Lambdas            Zitieren

C++:
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
auto print = [] (const std::string& s) -> void {
        std::cout << s << '\n';
};
 
int main()
{
        print("Hello, Test!");
}


Das kompiliert zu meinem Erstaunen fehlerfrei. Lambdas haben also freien Zugriff auf globale Variablen. Warum hat man sich dafür entschieden?
Unregistrierter





Beitrag Unregistrierter 22:09:47 12.04.2012   Titel:   Re: Lambdas            Zitieren

lulf schrieb:

Das kompiliert zu meinem Erstaunen fehlerfrei. Lambdas haben also freien Zugriff auf globale Variablen. Warum hat man sich dafür entschieden?


Zu meinem nicht, völlig korrekter Code (auch nicht besonders)...
Das ist einer der Konzepte (zugriff auf scope-locals).

Außerdem können normale Funktionen genauso auf globals zugreifen.

P.S.: Das ->void ist da unnötig, da der Rückgabetyp sich ähnlich wie bei PHP automatisch deduzieren lässt... :D


Zuletzt bearbeitet von Unregistrierter am 22:12:23 12.04.2012, insgesamt 2-mal bearbeitet
lufl
Unregistrierter




Beitrag lufl Unregistrierter 22:12:34 12.04.2012   Titel:   Re: Lambdas            Zitieren

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. :rolleyes:
Unregistrierter





Beitrag Unregistrierter 22:14:12 12.04.2012   Titel:   Re: Lambdas            Zitieren

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.

C++:
auto lambda = [&](){std::cout << a << '\n';};


Das mit
Zitat:
zu meinem nicht..
, da meinte ich dass es mich überhaupt nicht überrascht.


Zuletzt bearbeitet von Unregistrierter am 22:15:12 12.04.2012, insgesamt 2-mal bearbeitet
Unregistrierter





Beitrag Unregistrierter 22:16:08 12.04.2012   Titel:   Re: Lambdas            Zitieren

lufl schrieb:

Hacker schrieb:
Außerdem können normale Funktionen genauso auf globals zugreifen.
Ja super, tolles Argument. :rolleyes:


Wo findest du unterscheiden sich Lambdas und normale Funktionen genau?
lulf
Unregistrierter




Beitrag lulf Unregistrierter 22:23:35 12.04.2012   Titel:              Zitieren

lol :rolleyes:
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.
Unregistrierter





Beitrag Unregistrierter 22:35:42 12.04.2012   Titel:              Zitieren

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 :D ?

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.


Zuletzt bearbeitet von Unregistrierter am 22:40:22 12.04.2012, insgesamt 2-mal bearbeitet
pumuckl
Moderator

Benutzerprofil
Anmeldungsdatum: 21.06.2005
Beiträge: 7326
Beitrag pumuckl Moderator 09:00:14 13.04.2012   Titel:   Re: Lambdas            Zitieren

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:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
#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.

_________________
Du brauchst Hilfe? - Forenregeln. Den richtigen Code posten - machs uns einfacher dir zu helfen
Don't feed the Help Vampires!
knivil
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.02.2009
Beiträge: 5851
Beitrag knivil Mitglied 09:10:05 13.04.2012   Titel:              Zitieren

Zitat:
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?
Zitat:
Lambdas sind, im Gegensatz zu Funktionen, Objekte.
Konzept und Umsetzung sind zwei verschiedene Dinge.
Zitat:
haben Lambdas garantiert keine Seiteneffekte
Das ist falsch wie du siehst. Sie sollen sich nicht anders als normale Funktionen verhalten.
Zitat:
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.

_________________
If it were not for laughter, there would be no Tao.
Sie können einen Beitrag nicht so schnell nach Ihrem letzten absenden, bitte warten Sie einen Augenblick.


Zuletzt bearbeitet von knivil am 09:15:27 13.04.2012, insgesamt 1-mal bearbeitet
314159265358979
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.03.2010
Beiträge: 4658
Beitrag 314159265358979 Mitglied 12:19:37 13.04.2012   Titel:              Zitieren

Die Standard-Lambdas sind doch eh Müll, meine Lambda-Lib ist viel besser. :D
c++.de :: C++ (auch C++0x und C++11) ::  Lambdas  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.