Staram się realizować ten kawałek funkcji wyższego rzędu w python przy użyciu C++:Różne wyniki uzyskane za pomocą rodzajowe lambdy oraz funkcję automatycznego typu zwrot w C++ 14
def add1(x):
def helper():
nonlocal x
x += 1
return x
return helper
Oto trzy wersje I utworzona:
#include <iostream>
#include <functional>
using namespace std;
function<int(void)> add1_v1(int x) {
function<int(void)> g = [&x]() {return ++x;};
return g;
}
auto add1_v2(int x) {
function<int(void)> g = [&x]() {return ++x;};
return g;
}
auto add1_v3(int x) {
auto g = [&x]() {return ++x;};
return g;
}
int main() {
auto a = add1_v1(100);
auto b = add1_v2(100);
auto c = add1_v3(100);
for(int i = 0; i < 3; ++i) {
cout << a() << endl;
}
cout << "-------------------------------------------" << endl;
for(int i = 0; i < 3; ++i) {
cout << b() << endl;
}
cout << "-------------------------------------------" << endl;
for(int i = 0; i < 3; ++i) {
cout << c() << endl;
}
return 0;
}
wyjścia są:
101
102
103
-------------------------------------------
4239465
4239466
4239467
-------------------------------------------
4201325
4201325
4201325
Tylko add1_v1 pasuje to, co chcę. Czy ktoś może wyjaśnić mi przyczynę?
Co to znaczy „nie działa” oznacza? – Brian
@Brian Zrewidowano problem. –
Oni wszyscy są w błędzie. 'add1_v1' ma szczęście. – immibis