• # :)

    Posté par (Mastodon) . En réponse au journal Compter en C++, de 98 jusqu'à 11. Évalué à 10.

    Allez, tu as pris les devants dans ton journal mais je vais quand même le dire. C'est dommage que ce soit en anglais. Il existe déjà pas mal de documentation en anglais sur C++, tu ne pourras pas rivaliser en tant que locuteur non-natif de ce dialecte. Alors que la documentation en français sur C++ est quasi-inexistante. Je vais même aller plus loin, j'aurais bien contribué si ça avait été en français, parce que je me dis qu'un tel document aurait sans doute été très utile à mes étudiants. Bref, c'est ton choix, ce n'est pas très grave, ça fera toujours quelque chose en plus à se mettre sous la dent.

    J'ai commencé à parcourir, ça a l'air plutôt bien rédigé. J'ai juste quelques remarques pour l'instant.

    Dans la section 2.4.1, tu fais une classe avec des attributs const. C'est une très mauvaise idée parce qu'une telle classe sera difficilement utilisable en pratique parce que tu ne pourras plus utiliser le déplacement (move) du fait du const. Avec des types simples, ça ne se verra pas, mais dès que tu vas utiliser std::string par exemple, ton déplacement va se transformer en copie et donc, va potentiellement envoyer une exception et donc tout va te coûter plus cher parce qu'il y a tout un tas d'optimisations liées au fait qu'un déplacement ne peut pas envoyer d'exception (noexcept), comme dans std::vector par exemple. Du coup, pour illustrer ton chapitre, je prendrais plutôt une référence comme attribut, parce que déjà tu ne peux plus faire de init comme tu le fais là, et que du coup, les constructeurs délégués prennent tout leur sens.

    Dans la section 2.4.5, tu utilises des identifiants avec deux underscores consécutifs. Normalement, tu n'as pas le droit, tous les identifiants avec deux underscores consécutifs sont réservés.

    Dans la section 2.5.9, je pense que std::bind a plus ou moins été supplanté par les lambdas. Dans plein de cas, tu peux créer une lambda qui fera exactement pareil et qui sera sans doute plus simple une fois compilée que tout l'attirail derrière std::bind dont tu donnes un aperçu dans la section précédente.

    Dans la section 2.6.5, il y a une typo, il manque un underscore devant g dans la définition.