The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man.
George Bernard Shaw
I've put together a list of books in the form of a complete course of C++ study, from absolute newbie to total guru (I'm still working through it myself...). It is the course I have set for myself, but without the wrong turns and wrong books along the way.
I have bought, read, and can heartily recommend all of the textbooks here.
Koenig & Moo
I discovered this book very late in my studies, and it immediately shot to the top of my list. Compared to most introductory texts this is a fairly slim volume, but it one of the most amazingly dense texts I've ever read. In fact, it only starts as an introductory text... It contains a huge number of concepts and ideas per page, while still being readable.
Bruce Eckel, Chuck Allison
A long-time favourite, this is actually two books. The first, Volume One, is an introduction to C++, while Volume Two introduces more advanced concepts and language features. Both texts are available online. Bruce has very generously let anyone read, or even print, a copy of his book for free. I maintain an official mirror of the books (see below). He claims everyone wins — He gets a lot of attention, and a lot of free proof readers, and we get to read an excellent book for nothing, if we so wish... Go to my mirror of the books »
Once you have learnt the basics of C++, you will want to practise so as to consolidate your knowledge. Almost certainly you will spend many hours wondering 'Why the #$!@% doesn't this work!!!' — or at the very least, 'What was the syntax to do x again?'. You need to always have ready access to a couple of good reference books.
Bjarne Stroustrup
Bjarne invented the language, and his book remains the authoritative reference. It has been updated through a number of editions (currently at the third) as new features are added to the language and standard library.
It's a bit too advanced as a general introduction to the language, unless you are already an experienced programmer already, but it serves as a great reference.
Nicolai Josuttis
The Title really says it all. This book serves as an excellent reference to the Standard C++ Library, especially the parts historically taken from the STL.
While you could learn about the library from this book, volume two of Thinking in C++ provides a easier to digest overview.
Knowing how to program in C++ is a long, long way away from knowing how to program well. C++ supports an amazingly diverse variety of programming styles — which can actually prove to be a problem for the uninitiated.
A poor text book will teach you only the syntax of the language, and the various language features. This is all very well, but what you really need to know is when to use these various features (exceptions, RTTI, member templates, multiple inheritance, pure virtual classes, etc, etc...).
The following books are those I've found, and still find, useful in this regard. A book from the first section, Accelerated C++ also really deserves to be mentioned here...