{"id":2220,"date":"2015-04-15T17:43:38","date_gmt":"2015-04-15T17:43:38","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=2220"},"modified":"2016-08-06T12:53:23","modified_gmt":"2016-08-06T12:53:23","slug":"nouveautes-c11","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=2220","title":{"rendered":"Nouveaut\u00e9s C++11"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/5146902896965.jpg.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-2215\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/5146902896965.jpg.png\" alt=\"5146902896965.jpg\" width=\"585\" height=\"332\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/5146902896965.jpg.png 585w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/5146902896965.jpg-300x170.png 300w\" sizes=\"(max-width: 585px) 100vw, 585px\" \/><\/a><\/p>\n<p><strong>Intro : <\/strong><\/p>\n<p>Des changements ont \u00e9t\u00e9 ajout\u00e9s dans la nouvelle version du C++ (nomm\u00e9e C++11).<\/p>\n<p>Tous les mots-cl\u00e9s en liaison avec les changements sont repr\u00e9sent\u00e9s dans l&rsquo;image de l&rsquo;en-t\u00eate.<\/p>\n<p><strong>Explications :<\/strong><\/p>\n<p>Le mot-cl\u00e9 \/ constante <em><strong>nullptr<\/strong><\/em> :<\/p>\n<p>&#8211; Il remplace l&rsquo;ancien \u00ab\u00a0#define NULL 0 \u00a0\u00bb pour d\u00e9finir un pointeur nul.<\/p>\n<p>Le mot-cl\u00e9 <em><strong>auto<\/strong> <\/em>:<\/p>\n<p>&#8211; Il identifie automatiquement le type de la variable correspondante en fonction de l&rsquo;affectation d\u00e9crite. Il permet de simplifier l&rsquo;\u00e9criture du code.<\/p>\n<p><span style=\"text-decoration: underline;\">Exemple :<\/span><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nfor(auto i = nombres.begin() ; i != nombres.end() ; ++i)\r\n{\r\n\u00a0\u00a0\u00a0 std::cout &lt;&lt; (*i) &lt;&lt; std::endl;\r\n}\r\n<\/pre>\n<p><strong><br \/>\ndecltype :<\/strong><\/p>\n<p>&#8211; Permet de <strong>retrouver le type<\/strong> de l&rsquo;objet lorsque l&rsquo;on a utilis\u00e9 le mot-cl\u00e9 <em><strong>auto<\/strong><\/em>.<\/p>\n<p><strong>Variadic templates<\/strong> :<\/p>\n<p>&#8211; Permet d&rsquo;utiliser un nombre variable de sp\u00e9cifications de classe sur les templates.<\/p>\n<p><strong>unique_ptr&lt;&gt; :<br \/>\n<\/strong><\/p>\n<p>&#8211; Un pointeur intelligent poss\u00e9dant qu&rsquo;un seul (et unique) propri\u00e9taire !<\/p>\n<p id=\"LII-B\" class=\"TitreSection1\"><strong>Initialisation des donn\u00e9es membres non-statique :<\/strong><\/p>\n<p class=\"TitreSection1\">&#8211; Les variables membres non-statiques peuvent \u00eatre d\u00e9finit au sein m\u00eame de la d\u00e9claration de la classe.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nclass UneClasse\r\n{\r\npublic:\r\n\u00a0\u00a0\u00a0 UneClasse() {}\r\n\u00a0\r\n\u00a0\u00a0\u00a0 int a = 7;\r\n\u00a0\u00a0\u00a0 int b = 5;\r\n\u00a0\r\nprivate:\r\n\u00a0\u00a0\u00a0 std::string s{&quot;Une cha\u00eene&quot;};\r\n};\r\n<\/pre>\n<p id=\"LII-C\" class=\"TitreSection1\"><strong><br \/>\nAlias de templates :<br \/>\n<\/strong><\/p>\n<p class=\"TitreSection1\">&#8211; On peut d\u00e9sormais utiliser le mot-cl\u00e9 \u00ab\u00a0<strong>using<\/strong>\u00a0\u00bb pour faire un alias \u00e0 la place du classique <strong>typedef <\/strong><\/p>\n<p class=\"TitreSection1\"><strong>Constructeurs d\u00e9l\u00e9gu\u00e9s : <\/strong><\/p>\n<p class=\"TitreSection1\">&#8211; Avec le C++11, un constructeur peut appeler un autre constructeur directement.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nstruct A\r\n{\r\n\u00a0\u00a0\u00a0 A(int);\r\n\u00a0\u00a0\u00a0 A(): A(42) { } \/\/ d\u00e9l\u00e8gue au constructeur A(int)\r\n};\r\n<\/pre>\n<p class=\"TitreSection1\"><strong><br \/>\nRange-based for : <\/strong><\/p>\n<p class=\"TitreSection1\">&#8211; On peut parcourir un tableau, une liste, un vector, etc&#8230; avec une boucle simplifi\u00e9e :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nstd::vector&lt;double&gt; v;\r\n\r\nfor (double d : v)\r\n{\r\n\u00a0\u00a0 \u00a0std::cout &lt;&lt; d &lt;&lt; std::endl;\r\n}\r\n\r\nfor (auto d : v)\r\n{\r\n\u00a0\u00a0 \u00a0std::cout &lt;&lt; d &lt;&lt; std::endl;\r\n}\r\n\r\nfor (auto&amp; d : v)\r\n{\r\n\u00a0\u00a0 \u00a0++d;\r\n}\r\n\r\nfor (auto const&amp; d : v)\r\n{\r\n\u00a0\u00a0 \u00a0++d;\r\n}\r\n\r\nstd::map&lt;int, std::string&gt; m;\r\n\r\nfor (auto element : m)\r\n{\r\n\u00a0\u00a0 \u00a0printf(&quot;%d\\n&quot;, element.first);\r\n    printf(&quot;%s\\n&quot;, element.second);\r\n}\r\n\r\n<\/pre>\n<p class=\"TitreSection1\"><strong><br \/>\nLes fonctions lambda :\u00a0<\/strong><\/p>\n<p class=\"TitreSection1\">&#8211; La syntaxe est : [ liste de capture ] ( param\u00e8tres ) retour { code }<\/p>\n<p class=\"TitreSection1\"><span style=\"text-decoration: underline;\">Exemple :<\/span><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n[](int element) {\r\n\u00a0\u00a0\u00a0 cout &lt;&lt; element &lt;&lt; endl;\r\n}\r\n<\/pre>\n<p class=\"TitreSection1\">On peut passer une fonction anonyme \u00e0 une variable :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nstd::function&lt;int (int, int)&gt; addition = [](int x, int y) -&gt; int {\r\n\u00a0\u00a0\u00a0 return x + y;\r\n};\r\n<\/pre>\n<p class=\"TitreSection1\"><strong><br \/>\nLes \u00e9num\u00e9rations fortement typ\u00e9es :<\/strong><\/p>\n<p>Dor\u00e9navant les num\u00e9rations peuvent \u00eatre fortement typ\u00e9es ainsi :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/ On rajoute le mot-cl\u00e9 &quot;class&quot;\r\nenum class Direction { Haut, Droite, Bas, Gauche }; \/\/ Se comporte comme des attributs !\r\n\r\n\/\/\u00a0 On est oblig\u00e9 de sp\u00e9cifier la classe d'origine &quot;Direction::&quot;\r\nDirection direction = Direction::Haut;\r\n\r\n\/\/ Pour afficher sa valeur enti\u00e8re on doit convertir :\r\nstd::cout &lt;&lt; static_cast&lt;int&gt;(direction) &lt;&lt; std::endl;\r\n\r\n<\/pre>\n<p class=\"TitreSection1\"><strong><br \/>\nBug template corrig\u00e9 :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/ Avant :\r\nstd::vector&lt;std::vector&lt;int&gt; &gt; nombres;\r\n\r\n\/\/ Apr\u00e8s :\r\nstd::vector&lt;std::vector&lt;int&gt;&gt; nombres;\r\n<\/pre>\n<p id=\"r-1271638\" class=\"foldable__button secondTitle js-foldable-button\" data-claire-element-id=\"1285963\"><strong><br \/>\nLes listes d\u2019initialisateurs :<br \/>\n<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nstd::vector&lt;int&gt; nombres = { 1, 2, 3, 4, 5 };\r\nstd::map&lt;int, std::string&gt; nombres = { { 1, &quot;un&quot; }, { 2, &quot;deux&quot; }, { 3, &quot;trois&quot; } };\r\n<\/pre>\n<p class=\"TitreSection1\"><strong><br \/>\nLes tableaux \u00e0 taille fixe :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nstd::array&lt;int, 5&gt; tableauFixe;\r\n<\/pre>\n<p class=\"TitreSection1\"><strong><br \/>\nTuple :<\/strong><\/p>\n<h4><span id=\"M.C3.A9moire_locale_pour_un_thread\" class=\"mw-headline\">M\u00e9moire locale pour un thread :<br \/>\n<\/span><\/h4>\n<p>&#8211; Avec le mot-cl\u00e9 <strong>std::thread_local<\/strong>, on peut sp\u00e9cifier une variable locale \u00e0 un thread !<\/p>\n<h4><span id=\"Sizeof_sur_les_attributs_de_classes_sans_objet_explicite\" class=\"mw-headline\">Sizeof sur les attributs de classes :<br \/>\n<\/span><\/h4>\n<p>&#8211; On peut d\u00e9sormais savoir la taille qu&rsquo;occupe un attribut d&rsquo;une classe.<\/p>\n<p class=\"TitreSection1\"><strong>R\u00e9f\u00e9rences :<\/strong><\/p>\n<p class=\"TitreSection1\">&#8211; http:\/\/cpp.developpez.com\/redaction\/data\/pages\/users\/gbdivers\/cpp11\/<\/p>\n<p class=\"TitreSection1\">&#8211; http:\/\/fr.wikipedia.org\/wiki\/C%2B%2B11<\/p>\n<p class=\"TitreSection1\">&#8211; http:\/\/openclassrooms.com\/courses\/introduction-a-c-2011-c-0x<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : Des changements ont \u00e9t\u00e9 ajout\u00e9s dans la nouvelle version du C++ (nomm\u00e9e C++11). Tous les mots-cl\u00e9s en liaison avec les changements sont repr\u00e9sent\u00e9s dans l&rsquo;image de l&rsquo;en-t\u00eate. Explications : Le mot-cl\u00e9 \/ constante nullptr : &#8211; Il remplace l&rsquo;ancien \u00ab\u00a0#define NULL 0 \u00a0\u00bb pour d\u00e9finir un pointeur nul. Le mot-cl\u00e9 auto : &#8211; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/2220"}],"collection":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2220"}],"version-history":[{"count":79,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/2220\/revisions"}],"predecessor-version":[{"id":5368,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/2220\/revisions\/5368"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}