{"id":4357,"date":"2020-03-21T20:14:56","date_gmt":"2020-03-22T03:14:56","guid":{"rendered":"https:\/\/cppcon.org\/?page_id=4357"},"modified":"2021-07-04T14:41:46","modified_gmt":"2021-07-04T21:41:46","slug":"class-2020-tricky-parts","status":"publish","type":"page","link":"https:\/\/cppcon.org\/class-2020-tricky-parts\/","title":{"rendered":"Advanced and Modern C++ Programming: The Tricky Parts [2020 Class Archive]"},"content":{"rendered":"<p><em>Advanced and Modern C++ Programming: The Tricky Parts<\/em> is a three-day online training course with programming <span class=\"s1\">examples<\/span> taught by Nicolai Josuttis. It has been one of our most popular classes. It is offered online from 11AM to 5PM Eastern Time (EDT),\u00a0 Wednesday September 9th through Friday September 11th, 2020 (before the conference).<\/p>\n<h3>Course Description<\/h3>\n<p>Whenever I give C++ trainings I run into the same topics of &#8220;half knowledge&#8221;. We use a lot of pretty complicated features (e.g., templates, move semantics, and smart pointers) in our day-to-day programming without full understanding. Most of the time this works fine, but sometimes not. Even vectors and strings may cause surprises (e.g., to understand when and how memory is allocated).<\/p>\n<p>This tutorial will discuss all these &#8220;tricky fundamental&#8221; C++ features application programmers see and use day by day. We will motivate them, understand them, and see how they should be used in practice. As a result, you will understand C++ a lot better and advance to the next level of an experienced C++ programmer.<\/p>\n<h3>Prerequisites<\/h3>\n<p class=\"p1\">Students are expected to have a basic knowledge of C++ including C++11.<\/p>\n<p class=\"p1\">Students are not required to bring any laptop. We will go through code examples together with the laptop of the presenter.<\/p>\n<h3>Course Topics<\/h3>\n<ul>\n<li>Strings (and the short string optimization)<\/li>\n<li>When to use which container<\/li>\n<li>Using templates in practice<\/li>\n<li>The hidden penalty of using shared pointers<\/li>\n<li>How to benefit from move semantics in basic C++ classes<\/li>\n<li>When types decay<\/li>\n<li>Value categories and materialization (and why I should care)<\/li>\n<li>Disabling functions (SFINAE and requires)<\/li>\n<li>Overloading right &#8211; Rules of special member functions<\/li>\n<li>Exception handling in practice<\/li>\n<li>The real way to initialize objects (and why AAA is bad)<\/li>\n<li>Returning values perfectly<\/li>\n<li>Concurrency traps<\/li>\n<li>Allocators (why, when, and how)<\/li>\n<\/ul>\n<h3>Course\u00a0Instructor<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-1695 size-medium\" src=\"https:\/\/cppcon.org\/wp-content\/uploads\/2017\/05\/NicoJosuttis-300x294.jpeg\" alt=\"Nicholia Josuttis\" width=\"175\" height=\"175\" \/><\/p>\n<p><strong>Nicolai Josuttis<\/strong> (www.josuttis.com) is an independent systems architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunication, traffic, finance, and manufacturing industries.<br \/>\nHe is well known in the C++ Community for speaking and writing with authority about C++ (being the author of <em><a href=\"http:\/\/www.cppstdlib.com\/\">The C++ Standard Library<\/a><\/em>, <em><a href=\"http:\/\/www.tmplbook.com\/\">C++ Templates<\/a><\/em>, and <a href=\"http:\/\/cppstd17.com\">C+++17: The Complete Guide<\/a>) but is also an innovative presenter.<br \/>\nHe is an active member of C++ standardization committee for more than 20 years now.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Advanced and Modern C++ Programming: The Tricky Parts is a three-day online training course with programming examples taught by Nicolai Josuttis. It has been one of our most popular classes. It is offered online from 11AM to 5PM Eastern Time (EDT),\u00a0 Wednesday September 9th through Friday September 11th, 2020 (before the conference). Course Description Whenever [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"class_list":["post-4357","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cppcon.org\/wp-json\/wp\/v2\/pages\/4357","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cppcon.org\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cppcon.org\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cppcon.org\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/cppcon.org\/wp-json\/wp\/v2\/comments?post=4357"}],"version-history":[{"count":3,"href":"https:\/\/cppcon.org\/wp-json\/wp\/v2\/pages\/4357\/revisions"}],"predecessor-version":[{"id":5443,"href":"https:\/\/cppcon.org\/wp-json\/wp\/v2\/pages\/4357\/revisions\/5443"}],"wp:attachment":[{"href":"https:\/\/cppcon.org\/wp-json\/wp\/v2\/media?parent=4357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}