This appendix contains a list of books and online resources on various C++-related topics that were either consulted while writing this book, or are recommended for further or background reading.
A quick (about 190 pages) tutorial-based overview of the entire C++ language and Standard Library at a moderately high level for people who already know C++ or are at least experienced programmers. This book includes C++11 features.
A very thorough introduction to C++ that covers just about everything in the language in a very accessible format and in great detail.
Covers the same material as C++ Primer, but in much less space, because it assumes that the reader has programmed in another language before.
An excellent introduction to C++ programming that expects the reader to know C already. This text is available at no cost online at www.bruceeckel.com.
The home of Standard C++ on the web, containing news, status, and discussions about the C++ standard on all compilers and platforms.
A huge collection of frequently asked questions about C++.
Three books that provide excellent tips and tricks on commonly misused and misunderstood features of C++.
The “bible” of C++ books, written by the designer of C++. Every C++ programmer should own a copy of this book, although it can be a bit obscure in places for the C++ novice.
Presented as a set of puzzles, with one of the best, most thorough discussions of proper resource management and exception safety in C++ through Resource Acquisition is Initialization (RAII). This book also includes in-depth coverage of a variety of topics, such as the pimpl idiom, name lookup, good class design, and the C++ memory model.
Covers additional exception safety topics not covered in Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions. This book also discusses effective object-oriented programming and correct use of certain aspects of the Standard Library.
Discusses generic programming, optimization, and resource management. This book also has an excellent exposition of how to write modular code in C++ by using nonmember functions and the single responsibility principle.
Provides 99 specific tips for C++ programming.
The second volume of Eckel’s book, which covers more advanced C++ topics. The text is also available at no cost online at www.bruceeckel.com.
A C++ reference covering everything from the basics to more-advanced material.
One of the most comprehensive C++ books available.
An excellent reference of C++98, C++03, C++11, C++14, and C++17.
A website containing a lot of information related to C++, with a complete reference of the language, including C++17.
A well-written article that takes the mystery out of defining custom stream manipulators in C++.
A unique blend of software development advice and C++ specifics, as well as a very good explanation of locale and Unicode support in C++.
A treatise by Joel Spolsky on the importance of localization. After reading this, you’ll want to check out the other entries on his Joel on Software website.
The definitive book on Unicode, which all developers using Unicode must have.
The best resource for finding Unicode characters, charts, and tables.
An explanation of what the Universal Character Set (UCS) is, including the Unicode standard.
This quick reference is a condensed guide to all essential data structures, algorithms, and functions provided by the C++ Standard Library
Covers the entire Standard Library, including I/O streams and strings as well as the containers and algorithms. This book is an excellent reference.
Written in the same spirit as the author’s Effective C++ books. This book provides targeted tips for using the Standard Library, but is not a reference or tutorial.
An interesting video lecture series on the C++ Standard Library.
Similar to the Josuttis text, but covering only parts of the Standard Library, such as containers and algorithms.
An excellent explanation of making function templates friends of classes.
Everything you ever wanted to know (or didn’t want to know) about C++ templates. This book assumes significant background in general C++.
Delivers practical metaprogramming tools and techniques into the hands of the everyday programmer.
A wealth of papers written by the C++ standards committee.
A document containing the presentation materials from a Scott Meyers’ training course. This is an excellent reference to get a list of all C++11 and select C++14 features.
Three Wikipedia articles with a description of new features added to C++11, C++14, and C++17.
One of the syntaxes of the regular expressions in C++ is the same as the regular expressions in the ECMAScript language, as described in this specification document.
A very readable book on UML 2.0. The authors use Java in examples, but they are convertible to C++ without too much trouble.
One of the most popular introductory algorithms books, covering all the common data structures and algorithms.
Knuth’s four-volume tome on algorithms and data structures. If you enjoy mathematical rigor, there is no better text on this topic. However, it is probably inaccessible without undergraduate knowledge of mathematics or theoretical computer science.
An approachable reference to data structures and algorithms.
A mathematical explanation of the Mersenne Twister, used to generate pseudo-random numbers.
Websites where the two main open-source movements explain their philosophies and provide information about obtaining open-source software and contributing to its development.
A huge number of free, peer-reviewed portable C++ source libraries. This website is definitely worth checking out.
Two websites that host many open-source projects. These are great resources for finding useful open-source software.
Excellent resources to find free libraries and code for reuse in your own projects.
Written for software engineers “in the trenches,” this text focuses on the technology—the principles, patterns, and process—that help software engineers effectively manage increasingly complex operating systems and applications.
An excellent guide to start with the Scrum methodology.
A classic book, and a must read for every software engineer. Almost twenty years later, its advice is still spot on. It examines the core process—what do you do, as an individual and as a team, if you want to create software that’s easy to work with and good for your users.
A landmark paper that described the state of software development at the time and proposed the Spiral Model.
One of several books in a series that promote Extreme Programming as a new approach to software development.
A guidebook for anybody who is responsible for the management of software development processes.
Discusses various aspects of the software development process and exposes hidden truisms along the way.
Provides an overview of RUP, including its mission and processes.
A wonderfully enlightening book about the politics and realities of software development.
A detailed discussion of the Scrum methodology.
Explains the concepts behind revision control systems, and what kinds of solutions are available.
This document is a set of guidelines for using C++ well. The aim of this document is to help people to use modern C++ effectively.
A classic book that espouses the practice of recognizing and improving bad code.
A must-have book on C++ design and coding style. “Coding standards” here doesn’t mean “how many spaces I should indent my code.” This book contains 101 best practices, idioms, and common pitfalls that can help you to write correct, understandable, and efficient C++ code.
A unique book that turns the issue of programming style upside down by challenging the reader to learn to read code properly in order to become a better programmer.
A highly configurable program that generates documentation from source code and comments.
A nice little book with advice about how to perform the most common operations on code: reading, modifying, testing, debugging, and writing.
A discussion of what code refactoring means, including a number of techniques for refactoring.
A discussion of the C++ style guidelines used at Google.
Two books that provide all the information most software engineers will ever need to know about computer architecture.
One of the few books to focus exclusively on efficient C++ programming. This book covers both language-level and design-level efficiency.
Information about the gprof profiling tool.
A book aimed at quality assurance professionals, although any software engineer will benefit from this book’s discussion of the software-testing process.
http://microsoft.com/vs
.
The Community Edition of Microsoft Visual Studio is a version of Visual Studio free of charge for students, open-source developers, and individual developers to create both free and paid applications. It’s also free of charge for up to five users in small organizations. It comes with an excellent graphical symbolic debugger.
www.gnu.org/software/gdb/gdb.html
.
An excellent command-line symbolic debugger.
http://valgrind.org/
.
An open-source memory-debugging tool for Linux.
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/application-verifier
.
A run-time verification tool for C++ code that assists in finding subtle programming errors and security issues that can be difficult to identify with normal application testing techniques.
Called the “Gang of Four” (GoF) book (because of its four authors), the seminal work on design patterns.
Offers an approach to C++ programming that employs highly reusable code and patterns.
A companion to the GoF book, explaining how patterns can actually be applied.
A book that goes further than just listing design patterns. The authors show good and bad examples of using patterns, and give solid reasoning behind each pattern.
Contains descriptions of a large number of design patterns used in computer programming.
A great discussion on operating systems, including multithreading issues such as deadlocks and race conditions.
An excellent book on practical multithreaded programming, including the C++ threading library.
A book for developers of various skill levels who are making the move into multicore programming.
A great book on writing code for multiprocessor and multicore systems.