An Introduction to Modern C++, In Three Days¶
Goal¶
C++, as of its standard revision in 2003, has been the worst language in the world [1]. Programmers were forced to write repetitive, clumsy, and error prone code - programming in it was far less than enjoyable.
That situation changed completely when the C++11 standard came out. Writing code is definitely fun again!
Contents¶
With many practical exercises and a great deal of trainer live hacking, this course gives a broad overview of the key language features.
Introductory Live Hacking A tour through many of the features that the new C++ brings.
Pythonicity Features Much of the new language looks like it has been greatly influenced by Python.
Range based
for
loopsauto
: duck typing, only without ducksStructured binding: the tuple unpacking in C++
Uniform Initialization
User’s view
Real initialization of STL containers
Many other consequences of the new initialization syntax
Not without pitfalls (this is C++)
Implementor’s view
New OO Features
overrride
final
= delete
= default
Smart Pointers
Previously either self hacked (who ever wrote a refcounting pointer class?) or via the now-deprecated
std::auto_ptr<>
, C++ now contains two real first-class managing pointer implementations.std::unique_ptr<>
. Typically frowned upon because of the long and incomprehensible compiler errors that bad usage brings, this pointer class is definitely worth a look. Based upon the new move semantics, it defines compiler-checked ownership transfer.std::shared_ptr<>
. A reference-counting pointer class that is easier to use, but more expensive.
Moving, RValue References, And Perfect Forwarding
Definitely the coolest C++ feature, albeit a bit hard to understand. With a great deal of live hacking and exercises, the audience will understand.
In short: ownership transfer and cheap object copy, but not without its pitfalls.
Functions:
std::function<>
, And Lambda ExpressionsThe second-coolest feature. Lambdas save you tons of writing (its capture syntax is a bit hard though), and
std::function<>
lets you use a polymorphism that is much more lightweight than pure OO. Both combined let you write very expressive code. If not overused, as always.Multithreading
Not cool, but rather dangerous, and everybody does it - so the language could not keep out of it any longer. Threads can now be started far too easily (in my optinion).
On the other hand, the language now brings with it many cool multithreading tools like
Mutexes in varying forms (error checking, recursive, …), together with scoped locking in many forms
Oneshot communication primitives like
std::future<>
,std::promise<>
A communication swiss army knife,
std::condition_variable
, which allows to build any communiction mechanism you want on top of itstd::atomic<>
, not to forget
Miscellaneous
constexpr
Strongly typed
enum
Delegating constructor
nullptr
…
Footnotes