Duration: 4 days

Dates: from Monday, December 7th to Friday, December 11th

Hours: 9:30 am - 5:30 pm

Location: Inria Bordeaux, Bâtiment INRIA, 200 av. de la vieille tour, 33405 Talence CEDEX, Alan Turing room

Instructors: Luca Cirrottola, Gilles Marait (SED Bordeaux), Jérôme Diaz, Sébastien Gilles (SED Saclay)

This course aims to give participants a solid foundation in C++ in its most modern form (C++11 to C++23). By the end of the course, the goals are to:

The course can be given in English or French depending on the participants; the course material is in English, and if the course is given in English (which is likely unless all attendants are at ease with French), it will be possible to ask questions in French - the goal is that language should not be an obstacle.

The presentation is available here and relies on Jupyter notebooks (it will change slightly before the December session). The README explains how to easily install our Jupyter kernel for C++, CppyyKernel, on your laptop, which will be essential since the course alternates between presentations and hands-on sessions.

Prerequisites for your laptop

No strong prerequisites are required: a version deployable on BinderHub is available this year.

It is nevertheless recommended to do a local installation of CppyyKernel (see the README: deployment on Binder takes a few minutes).

Optionally, a Docker image is provided if needed for the hands-on sessions.

Registration and format

Registration will be open very soon; an Evento link will be provided here.

If you are registered and cannot attend, please let us know so that we can adjust the logistics as best we can.

The course is free and open to everyone. It is aimed at an audience that already has development experience, but not necessarily with C or C++. It is possible to miss one of the sessions, but please be aware that they are not completely independent and follow a logical progression.

The course lasts 4 days; it has been spread over 5 days so that participants from remote centers can travel on Monday morning and Friday afternoon.

It is part of the DGD-I training plan, so travel expenses should be covered by a dedicated training budget. We are in contact with the HR department and the DGD-I to clarify how this coverage will work; this page will be updated once we have all the information.

Course content:

  1. Procedural programming
    • Variables, initialization, assignments
    • Conditions and loops
    • Predefined types
    • Functions
    • Dynamic memory allocation
    • Input and output
    • Static and constexpr keywords
  2. Object-oriented programming
    • Introduction to the concept of object-oriented programming
    • Member functions
    • (Basic) constructors and destructor
    • Encapsulation
    • Static attributes
    • Inheritance and polymorphism
  3. Operators
    • Introduction to the concept of operator overloading
    • Comparison operators
    • Stream operators (input/output)
    • Assignment operator and the canonical form of a class
    • Functors
  4. Templates
    • Introduction to the concept of templates
    • Specialization
    • Special syntaxes: the keywords typename, template, and the mandatory use of this
    • Metaprogramming
    • Teaser for more advanced concepts with templates
  5. Useful concepts and the standard library (STL)
    • Error handling
    • The RAII idiom
    • Containers
    • Associative containers
    • Move semantics
    • Smart pointers
    • STL algorithms
  6. C++ in a real-world environment
    • Setting up a minimal environment
    • File structure of a C++ program
    • Compilers
    • Third-party libraries: how to include them without picking up their compilation warnings
    • Namespaces
    • Miscellaneous tools