This document constitutes a detailed set of lecture slides on
programming using the C++ programming language. The topics
covered are quite broad, including the history of C++, the C++
language itself, the C++ standard library and various other
libraries, and software tools, as well as numerous other
programming-related topics. Coverage of C++ is current with
the C++14 standard.

Many aspects of the C++ language are covered from introductory
to more advanced. This material includes: language basics
(objects, types, values, operators, expressions, control-flow
constructs, functions, and namespaces), classes, templates
(function, class, alias, and variable templates; template
specialization; and variadic templates), lambda expressions,
inheritance and run-time polymorphism, exceptions (exception
safety, RAII, and smart pointers), rvalue references (move
semantics and perfect forwarding), concurrency (sequential
consistency, atomic memory operations, data races; threads,
mutexes, condition variables, promises and futures, atomics,
and fences; happens-before and synchronizes-with relationships;
and sequentially-consistent and other memory models). A number
of best practices, tips, and idioms regarding the use of the
language are also presented. Some aspects of the C++ standard
library are covered, including: containers, iterators, and
algorithms; the std::vector and std::basic_string classes; I/O
streams; time measurement; and smart pointers. Various general
programming-related topics are also presented, such as material
on: good programming practices, finite-precision arithmetic,
software documentation, software build tools (such as CMake
and Make), and version control systems (such as Git).

All versions of the lectures slides that are
currently available are
listed below.
All versions of these documents are available in electronic form
(i.e., PDF format) for download from this web page.
(See below.)
Some versions of these documents are also available in print form
via online order from the
University of Victoria Bookstore.

The lecture slides have a companion Git repository that is hosted by
GitHub.
This repository contains numerous code examples and programming exercises.
The URL for the main web page associated with the repository is:

If you find these lecture slides useful (as a student, instructor, or otherwise),
the author would ask that you please consider joining the (moderated)
Google Group for announcements regarding these lecture slides.
This will benefit you by allowing you to receive notifications of new
releases of the lecture slides.
To join the Google Group for the lecture slides, simply enter your email address
in the box below and click on the "Subscribe" button.

Subscribe to An Introduction to the C++ Programming Language Lecture Slides Announcements