Online reference: cppreference
Frequently conjoined with C; Bjarne wanted C++ to be "as close as possible to C, but not closer." Over the years, C++ has taken a strong stand on some lexical and syntactic things about C that didn't hold up well over time, and C has retrofitted many of those choices back into C.
Variants and extensions
- cppman: C++ manual pages for Linux/MacOS
- C++ standard library reference (cppreference)
- Formatted C++ stdlib man pages (cppreference)
- A cheatsheet of modern C++ language and library features
- Overview of the New C++ (C++11/14) (PDF only) (Meyers) (updated for C++14) These are the presentation materials (slides and some lecture notes) of a three-day training course offered by Meyers, who's a highly respected author on C++. Even though the list of items is short, the quality is high.
- The C++ Core Guidelines (C++11/14/17/...) (edited by Bjarne Stroustrup and Herb Sutter) is an evolving online document consisting of a set of guidelines for using modern C++ well. The guidelines are focused on relatively higher-level issues, such as interfaces, resource management, memory management, and concurrency affecting application architecture and library design. The project was announced at CppCon'15 by Bjarne Stroustrup and others and welcomes contributions from the community. Most guidelines are supplemented with a rationale and examples as well as discussions of possible tool support. Many rules are designed specifically to be automatically checkable by static analysis tools.
- The C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup, and others) is an effort by the Standard C++ Foundation to unify the C++ FAQs previously maintained individually by Marshall Cline and Bjarne Stroustrup and also incorporating new contributions. The items mostly address issues at an intermediate level and are often written with a humorous tone. Not all items might be fully up to date with the latest edition of the C++ standard yet.
The Definitive C++ Book Guide and List
- The C++ Programming Language (Bjarne Stroustrup) The classic introduction to C++ by its creator. Written to parallel the classic K&R, this indeed reads very much like it and covers just about everything from the core language to the standard library, to programming paradigms to the language's philosophy.
- Effective C++ (Meyers) (3rd Edition)
- Effective Modern C++ (Meyers)
- Effective STL (Meyers)
- More Effective C++ (Meyers)
- Advanced C++ Programming Styles and Idioms (James Coplien)
- C++ Primer (Lippman, Lajoie, Moo) (updated for C++11)
- The Design and Evolution of C++ (Bjarne Stroustrup)
- Inside the C++ Object Model (Stanley Lippman)
- Programming: Principles and Practice Using C++ (Bjarne Stroustrup), 2nd Edition
- A Tour of C++ (Bjarne Stroustrup) (2nd edition) (for C++17)
- Exceptional C++ (Sutter)
- More Exceptional C++ (Sutter)
- Exceptional C++ Style (Sutter)
- C++ Coding Standards (Sutter, Alexandrescu)
- Accelerated C++ (Koenig, Moo)
- Large Scale C++ Software Design (John Lakos)
- The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis)
- C++ Templates: The Complete Guide (Vandevoorde, Josuttis)
- C++ 17 - The Complete Guide (Nicolai M. Josuttis): This book describes all the new features introduced in the C++17 Standard covering everything from the simple ones like 'Inline Variables', 'constexpr if' all the way up to 'Polymorphic Memory Resources' and 'New and Delete with over aligned Data'.
- C++ 20 - The Complete Guide (Nicolai M. Josuttis): This book presents all the new language and library features of C++20. It covers the motivation and context of each new feature with examples and background information. The focus is on how these features impact day-to-day programming, what it means to combine them, and how to benefit from C++20 in practice. (Note that this book is published step-by-step.)
- C++ in Action (Bartosz Milewski): This book explains C++ and its features by building an application from ground up.
- Functional Programming in C++ Ivan Čukić This book introduces functional programming techniques to modern C++ (C++11 and later). A very nice read for those who want to apply functional programming paradigms to C++.
- Modern C++ Design (Andrei Alexandrescu): A groundbreaking book on advanced generic programming techniques. Introduces policy-based design, type lists, and fundamental generic programming idioms then explains how many useful design patterns (including small object allocators, functors, factories, visitors, and multi-methods) can be implemented efficiently, modularly, and cleanly using generic programming.
- C++ Template Metaprogramming (David Abrahams and Aleksey Gurtovoy)
- C++ Concurrency In Action (Anthony Williams): A book covering C++11 concurrency support including the thread library, the atomics library, the C++ memory model, locks and mutexes, as well as issues of designing and debugging multithreaded applications. A second edition covering C++14 and C++17 has already been published.
- Advanced C++ Metaprogramming (Davide Di Gennaro): A pre-C++11 manual of TMP techniques, focused more on practice than theory. There are a ton of snippets in this book, some of which are made obsolete by type traits, but the techniques, are nonetheless useful to know. If you can put up with the quirky formatting/editing, it is easier to read than Alexandrescu, and arguably, more rewarding. For more experienced developers, there is a good chance that you may pick up something about a dark corner of C++ (a quirk) that usually only comes about through extensive experience.
- Large Scale C++ volume I, Process and architecture (2020) (John Lakos): Part one of a three-part series extending the older book 'Large Scale C++ Design'. Lakos explains battle-tested techniques to manage very big C++ software projects. If you work in a big C++ software project this is a great read, detailing the relationship between physical and logical structure, strategies for components, and their reuse.
- Ruminations on C++ (Andrew Koenig and Barbara Moo)
- C++ Standard Library Tutorial and Reference (Nicolai Josuttis): (updated for C++11) The introduction and reference for the C++ Standard Library. The second edition (released on April 9, 2012) covers C++11.
- The C++ IO Streams and Locales (Angelika Langer and Klaus Kreft): There's very little to say about this book except that if you want to know anything about streams and locales, then this is the one place to find definitive answers.
- Scientific and Engineering C++: An Introduction to Advanced Techniques and Examples (John Barton and Lee Nackman)
The C++11/14/17 Standard (INCITS/ISO/IEC 14882:2011/2014/2017) This, of course, is the final arbiter of all that is or isn't C++. Be aware, however, that it is intended purely as a reference for experienced users willing to devote considerable time and effort to its understanding. The C++17 standard is released in electronic form for 198 Swiss Francs.
The C++17 standard is available, but seemingly not in an economical form – directly from the ISO it costs 198 Swiss Francs (about $200 US). For most people, the final draft before standardization is more than adequate (and free). Many will prefer an even newer draft, documenting new features that are likely to be included in C++20.
Articles and papers (focused on teaching, but also of interest for learning by self-studying)
- A Conversation about Teaching Software Engineering - John Regehr
- How to Teach “Modern C++” to Someone who Already Knows Programming?
- Koenig, A. & Moo, B. (2005) Learning & Teaching C++ Programming, http://www.drdobbs.com/learning-teaching-c-programming/184401918, C/C++ Users Journal February, 2005.
- Koenig, A. (2012) on "C++ Primer 5th Edition":
- Part 1: How To Revise a Textbook, http://www.drdobbs.com/cpp/c-primer-5th-edition-part-1-how-to-revis/240003977, Dr. Dobb's, July 19, 2012.
- Part 2: How Language Revisions Change Strategy, http://www.drdobbs.com/cpp/c-primer-5th-edition-part-2-how-language/240004388, Dr. Dobb's, July 25, 2012.
- Part 3: Smart Pointers Make It Harder To Teach How To Write Copy Constructors, http://www.drdobbs.com/cpp/c-primer-5th-edition-part-3-smart-pointe/240004805, Dr. Dobb's, August 2, 2012.
- Part 4: What Makes a Good Example?, http://www.drdobbs.com/cpp/c-primer-5th-edition-part-4-what-makes-a/240005166, Dr. Dobb's, August 8, 2012.
- Part 5: Core Language Versus Library?, http://www.drdobbs.com/cpp/c-primer-5th-edition-part-5-core-languag/240005657, Dr. Dobb's, August 15, 2012
- Stroustrup, Bjarne (1999) Learning Standard C++ as a New Language; http://www.stroustrup.com/new_learning.pdf, C/C++ Users Journal, pp 43-54, May 1999.
- Stroustrup, Bjarne (2009) Programming in an undergraduate CS curriculum, http://www.stroustrup.com/software.pdf, WCCCE'09. May 2009.
- Stroustrup, Bjarne (2010) What Should We Teach New Software Developers? Why?,
http://cacm.acm.org/magazines/2010/1/55760-what-should-we-teach-new-software-developers-why/fulltext, CACM, January 2010.
- Stroustrup, Bjarne (2011) Principles and Practice Using C++
Lectures & Talks
Learning & Teaching
- Beginning with C++
- C++: A General Purpose Language and Library - Kate Gregory and James McNellis
- Core C++ 2019 / Teaching C++ Workshop 2019 @MTA
- Experiences in Teaching Modern C++ to Beginners
- How to Teach C++ and Influence a Generation - Christopher Di Bella
- Learning and Teaching Modern C++
- Learning and teaching modern C++
- Learning (and teaching) modern C++ - Challenges and Resources
- Quantifying Accidental Complexity: An Empirical Look at Teaching and Using C++
- SG20 Education and Recommended Videos for Teaching C++
- Stop Teaching C (When Teaching C++) - Kate Gregory
Note: Some of the following are primarily for entertainment purposes; while providing useful guidance for self-study (and possibly self-amusement), using these for evaluation in a formal setting would likely be a terrible idea :-)
Overview of C++ features, by version: C++20 / C++17 / C++14 / C++11
- C++ standard draft
- C++ International Standard schedule
- Current Status
- ISO C++ paper scheduling and management
- Specref (search WG21 papers)
- wg21.link - WG21 redirect service - https://wg21.link/
- Where do I find the current C or C++ standard documents?
- a single C/C++ header you can include in your project to enable compiler-specific features while retaining compatibility with all compilers. It contains dozens of macros to help make your code easier to use, harder to misuse, safer, faster, and more portable.
- Portable Snippets
- Making a Language Cross Platform: Libraries and Tooling
- Naivety of Creating Cross-Platform, Modern C++ Libraries: A Tour Of Our Challenges and Successes
- Intro to the C++ Object Model
List of C++ UI libraries
Project-specific, but likely of interest to the general C++ community.
- C++ Code Review
- C++ Stack Overflow
Last modified 01 January 2023