2016-08-13 2 views
2
#include <iostream> 

typedef std::function<bool(int)> set; 

using namespace std; 

set singletonSet(int a) { 
    return [&] (int x) { return (a == x); }; 
} 

bool contains(set s, int test) { 
    return s(test); 
} 


int main() { 
    auto first = singletonSet(5); 

    auto r1 = contains(first, 10); 
    auto r2 = contains(first, 5); 

    cout << r1 << " " << r2 << endl; 

    return 0; 
} 

ich diese 0 1 drucken erwarten aber Ergebnis ist 1 1C++ std :: Funktion gibt unerwarteten Wert

Anfänger C++ labmda Programmierer hier so sorry im Voraus, wenn dies ein Grundfehler ist.

+2

'[&]' erfasst durch Verweis 'a', der nach der' return' Anweisung –

Antwort

4

Erfassen Sie nicht a per Referenz, erfassen Sie sie nach Wert. Wie es ist, speichern Sie eine freie Referenz innerhalb des Lambda, und die Verwendung führt später zu UB.

set singletonSet(int a) { 
    return [=] (int x) { return (a == x); }; 
    // ^
} 
+0

stirbt Danke Quentin! – shaz

+0

@shaz mein Vergnügen :) – Quentin

Verwandte Themen