Le 17 novembre 2021 à 18:36:37 :
std::function<int(std::function<void(int&)>)> r = [](auto f){ int a=0; f(a); return a; };
int c = r([](int& b){ b = 1; });Combien vaut
c?
Pour les jean-Python qui n'ont rien compris, r est une abstraction correspondant à une fonction qui prend comme unique argument une fonction qui prend une référence sur un int et ne retourne rien, et qui retourne pour sa part un int.
Dans r on met la fonction (lambda) qui suit jusqu'au point virgule.
Ensuite, c correspond à l'application de r en la fonction f qui se sert de la référence qui lui est passée pour écrire un 1 à cet endroit.
Dans r, la référence en question pointe vers un zéro écrit sur la pile, qui devient un 1 et qui est retourné par r ensuite (par copie).
Donc le résultat, c'est 1.
Le 17 novembre 2021 à 18:33:48 :
Le 17 novembre 2021 à 18:31:15 :
Le 17 novembre 2021 à 18:27:25 :
Le 17 novembre 2021 à 18:24:20 :
Y a rien de dinguele seul pointeur la c'est vers la structure du player
weapon_x est une fonction non ?
typedef struct {
int weapon_x;
} Player;player = malloc(sizeof(Player) * n);
player[0].weapon_x
comme t'avais écrit weapon_x(player[0]) avant j'ai conclu que c'était la meme meme chose soit une fonction
Le 17 novembre 2021 à 18:45:29 :
Le 17 novembre 2021 à 18:44:08 :
Le 17 novembre 2021 à 18:42:59 Elilalilolulu a écrit :
après je dis ça, j'ai jamais vraiment fait de C++, juste des souvenir de quand j'essayais un peu tout les langagestu as néanmoins raison
tu peux passer un pointeur sans '&' dans f(a) ? Ça fait ça automatiquement ?
Ben oui, c'est à ça que servent les références hein, sinon autant utiliser des pointeurs 
Le 17 novembre 2021 à 18:45:29 okhe2000 a écrit :
Le 17 novembre 2021 à 18:44:08 :
Le 17 novembre 2021 à 18:42:59 Elilalilolulu a écrit :
après je dis ça, j'ai jamais vraiment fait de C++, juste des souvenir de quand j'essayais un peu tout les langagestu as néanmoins raison
tu peux passer un pointeur sans '&' dans f(a) ? Ça fait ça automatiquement ?
c'est une référence, pas un pointeur
c'est comme si tu utilisais un pointeur sauf que tu n'as pas besoin de faire &a pour passer en paramètre et *b = 1;pour modifier l'entier
Le topic a bidé, je le relance avec la traduction du code du khey en Rust 
fn main() {
let r = |f: fn(&mut i32)->()| {
let mut x = 0;
f(&mut x);
x
};
let c = r(|x| {*x = 1;});
println!("{}",c);
}Le compilateur est assez intelligent pour caster la closure passé à r en fonction fn(&mut i32)->()
Débidage express seconde tentative, cette fois en Python, ne me forcez pas à écrire du code Java pour attirer les golems svp 
def r(f):
x = [0]
f(x)
return x[0]
def inc(t):
t[0] = 1
c = r(inc)
print(c)JvArchive compagnon