Un objet paf d'un type non nommé dérivant (de manière privé) de pif. Je laisse.
tout simplement, avec les 2 dernieres accolades représentant une "initializer list" vide, pour utiliser la nouvelle syntaxe uniformisé de construction des objets.
C'est techniquement valide, mais rien ne garanti lorsque file.ext est bien ouvert que la lecture d'un nombre non signé va réussir, il faudrait tester input.fail(), ensuite rien ne garanti que l'on a pas lu un nombre entre 0 et 4, on aurait alors non pas [-5..0] afficher mais [2^32-4..2^32-1] et 0 en retour
Bien joué. Il faut ajouter qu'il faut compiler en C++11 pour que le constructeur de input soit valide (avec une std::string), c'est surtout ça que j'attendait.
Personnelement je verifierait plutot que le life à bien été lu avec input.good(), ça me semble plus logique.
Je ne voit pas ton piege donc je vais surement tomber dedant, mais ce code retourne 2, car on appelle une lambda qui retourne une référence constante vers a dont la valeur de retour est assignée à b.
@moi62100: Officiellement std::function est en effet du C++11, cependant l'idée de std::function ca fait 10 ans qu'elle existe (boost::function, loki et std::function en C++0x assez tôt). Les lambda comme core langage, oui c'est plus nouveau.
NB: Je ne répond pas à la question pour laisser chercher (question déjà posé sur un autre forum).
C'est Undefined Behavior je dirais, la lambda déduit son retour en automatique, elle renvoit donc par copie, sauf que l'objet function s'attend à un objet pouvant renvoyer une référence.
Du coup, debug ou release importe peu, tout peu arriver ! en précisant "-> A const &" a la declaration de la lambda, ça devrait réglé le probleme
EDIT : Mais merci à Freedom pour avoir préciser que c'était une question vu sur le grand internet, du coup j'ai cherché, car si la source du bug me semblait evident, les trefonds du pourquoi ne m'était pas bien clair
Avec un Undefined Behavior, release ou debug peu jouer, les instructions peuvent être différentes et réorganisées. Sans les optis ça retourne 2, avec les optis ça me retourne 96 (g++-4.8). Mais c'est vrai que ça varie selon les compilos et la version.
Sinon oui, c'est tout à fait ça. Si le type de retour n'est pas indiquer la lambda utilise decltype sur la valeur de retour (`decltype(a)`) et vire les référence s'il y en a. Comme `a` est de type A, le retour est un type A. Dû coup, std::function manipule une temporaire (là encore ça passe) mais retourne une référence sur cette variable temporaire. Comme c'est une temporaire elle est détruite à la fin de std::function::operator()() (ou avant selon l'implémentation) et le dans le main `b` référence une variable qui n'existe plus.
* Une temporaire ici est une variable de type `const T &`initialisée par le retour d'une fonction retournant un type `T`. Cette temporaire est détruite à la fin du scope.
Pour le moment je n'ai pas de question marrante (ou tordus selon le point de vue) alors je sors un classique.
Ce code ne compile pas ou donne un résultat inattendu. Pourquoi `NULL` n'est pas adapter ? Par quoi faut-il remplacer la macro ?
NULL est pas adapté car il est souvent défini en tant que zero, zero qui a la particularité de pouvoir se transformer en pointeur, du coup, c'est la première fonction qui est priviligié.
Remarque, sur ps3, NULL était defini comme ca : "((char*)0)", pas classe
Remarque 2 : c++11 ajoute nullptr qui est d'un type std::nullptr_t. Ce type est à la discretion du compilateur néanmoins, mais cette manière de faire permet d'ajouter une surcharge à une fonction qui prend un pointeur pour spécialisé le code si l'appel se fait avec nullptr.
J'ai vu l'affiche de plane ce matin en allant voir kick-ass 2, je me suis fait la même réflexion.
globalsAreEvils = 1. Seul le constructeur par défaut est utiliser. Paf ne fait pas de copie pour le retour grâce à la RVO et comme le égal initialise pif, c'est le constructeur qui est appeler et donc pas de copie grâce à la RVO.
Comment redirigez le flux std::cout dans un fichier ?
@jo_link_noir: T'es sur la bonne piste avec les ellisions, sauf que tu oublies que le compilateur n'a pas l'obligation de les faire (d'où le pluriel dans la question de galop1n).
Freedom desole mais Code::Blocks est comme il etait depuis que je l'ai installer (en 2012) donc rien touché (enfin... ne me dit pas qu'il n'est pas a jour car ce la derniere version stable avec MinGW 4.7 )
Je suis juste un débutant expérimenté. RTFM | RTFD
Je suis juste un débutant expérimenté. RTFM | RTFD
Je suis juste un débutant expérimenté. RTFM | RTFD
Je suis juste un débutant expérimenté. RTFM | RTFD
Je suis juste un débutant expérimenté. RTFM | RTFD
Je suis juste un débutant expérimenté. RTFM | RTFD
Je suis juste un débutant expérimenté. RTFM | RTFD