Avatar ·

Quelles nouvelles fonctionnalités sont apparues dans C++17 ? Aperçu des changements clés et exemples

Bonjour à tous ! J'apprends le C++ et j'essaie actuellement de comprendre les nouveaux standards. Avant, je travaillais principalement avec C++11 et C++14, mais ici, sur le projet, des collègues ont dit qu'il était temps de passer à C++17. J'ai ouvert la documentation, et il y a tellement de nouveautés que j'en ai la tête qui tourne. J'ai entendu parler des structured bindings, de if constexpr, de std::optional et de std::variant. Mais comment tout cela fonctionne-t-il en pratique ? Par exemple, j'écris souvent du code où je dois retourner d'une fonction soit une valeur, soit une erreur. Avant, j'utilisais des tuples ou des paramètres de sortie. J'ai entendu dire qu'en C++17, il existe std::optional pour cela. Mais comment l'appliquer correctement ? Et qu'est-ce que la « garantie d'élision de copie » (guaranteed copy elision) ? J'ai entendu dire que cela accélère le retour des objets, mais je ne comprends pas le mécanisme. Je m'intéresse aussi à la simplification du travail avec les tuples et les paires. Avant, pour décomposer std::pair, il fallait écrire std::tie(a, b) = my_pair. Maintenant, il paraît qu'on peut écrire auto [a, b] = my_pair. Est-ce que ça marche vraiment ? Et la question la plus importante : qu'est-ce que