Tuesday, November 1, 2011

C++11 Training Materials Updated

Now that C++0x has become C++11, I updated the name of my training materials and released the latest revision to past buyers. This marks the third updated release of these materials since their original publication in April 2010.

Updating notes for a multiple-day training course (such as my three-day C++11 seminar) has an interesting constraint:  unless the changes involve adding or removing full days worth of material, the length of the course can't be changed.  For a topic like C++11, where I'm learning more all the time, this means that I sometimes want to add information without changing the length of the class.  One way I do that is by adding comments below the PowerPoint slides.  The comments don't get shown in class, but they elaborate on material in the slides.

For the most recent materials update, one of the ways I took advantage of this was by taking the following bullet point from a list of "Other Features" in C++11 (that the course doesn't really cover, typically because the features are less important or because there's currently little or no compiler support for them):
  • Contextual keywords for alignment control, preventing derivation, and constraining virtual function overrides.
I added the following elaboration in the comments:
The identifiers override and final are contextual keywords. Both classes and virtual functions may be declared final. final classes may not be used as bases (per 9/3), and final virtual functions may not be overridden in derived classes.  A virtual function declared override must override a function in a base class. The following is an amalgam of examples from 10.3/4-5:
struct B {
    virtual void f() const final;
    virtual void f(int);
struct D : B {
    void f() const;                      // error: D::f attempts to override final B::f
    void f(long) override;             // error: wrong signature overriding B::f
    void f(int) override;               // OK
Because elaborations like this generally don't get presented in class, this means that the information in the training materials is in some ways more comprehensive than the information I deliver during a presentation. On the other hand, during a live presentation, people can ask about whatever they want, so I typically address a variety of topics that aren't in the training materials at all.

To the best of my knowledge, my training materials are currently the best source of accessible information about C++11. The Internet is filled with pages about C++11, but many of them were written at a time when draft C++0x was still in a state of flux, and unless you already know the details of the final version of C++11, it's hard to judge whether what you read on a given page is up to date.  The final C++11 standard is definitive, of course, but it's currently expensive (about US$400 at the ISO store), and I don't think anybody will tell you it's easy to read or understand.  There is, as far as I know, only one book out that covers C++11, and although I have not read it, given its recent publication date, I'd be surprised if it takes into account the very latest changes that took place during standardization. (I'd hoped to link to this book, which I know about only from a press release, but now I can't find it. If you know which book it is -- or of other books currently available that cover C++11 -- please let me know.)

To be frank, my training materials aren't perfectly up to date, either.  I had hoped that they were, but it's a big standard (1353 pages), and just yesterday I received a set of bug reports from a member of the standardization committee pointing out places where my notes' treatment of some parts of C++11 are out of sync with the final standard.  I'll fix those problems in the next release of the training materials, a release that, like all releases, will be automatically pushed out to anybody who has purchased the materials.

If you're interested in a book-like publication covering the most important parts of C++11 (both language and library), I encourage you to consider purchasing my training materials.  If you like my other publications, I think you'll like these, too.  To see exactly what you'll be getting, check out the free sample.

Because this publication is in an unconventional format (annotated training materials), is available from a lesser-known publisher (Artima), and is electronic-only (DRM-free PDF), getting the word out about it has been challenging.  I'd appreciate it if you'd let people know about it, whether through blogs, tweets, social networks (the politically correct term for Facebook), email, or that most retro of communications mechanisms, face-to-face conversation.