I just purchased C++ GUI Programming with Qt4 and after reading the code samples in this book I’m beginning to realize that my knowledge of C++ is incomplete. I learned C++ two years ago from online tutorials and a couple of ebooks I downloaded, and it turns out none of these resources were good enough. Since then I haven’t touched the language and have been using Python instead.
Now I’m thinking of purchasing a good book on C++ that covers advanced topics, and the one I have in mind is Bruce Eckel’s Thinking in C++ (both volumes). I know they are available for free on the web, but I really can’t stand reading books on a laptop screen.
Since C++0x might be out pretty soon, is it wise to go ahead and spend cash on these books? Will C++0x break backwards compatibility? Volume 2 covers features like multithreading, templates etc. Would any of these features change significantly in C++0x?
I wouldn’t hold my breath for C++0x. I doubt it will be out by the end of this decade. Even when it will be out, you should probably count a year or so for compilers to implement it. Learn the fundamentals now, and it should be relatively easy for you to learn most of the new features when the standard is out. The Standards Committee is known for its efforts to maintain backward compatibility.
I personally check with the evolution of the standard from time to time, just out of curiosity. Subscribe to Herb Sutter’s blog feed and look for Standard updates.
My personal favourite advanced C++ book is Bjarne Stroustrup’s The C++ Programming Language, 3e. It is the one single C++ book from which I think I learnt the most, with respect to language and STL details. Scott Meyers’ books helped clarify a lot of things too. Meyers writes in a very readable language (English, I believe), and often what would happen is that I’d read an entire Item from Meyers’ book, and then find the same information in Stroustrup’s book condensed into a single sentence or so. That is to say Meyers’ books are extremely useful in getting your attention to interesting details.
As for the changes I expect for threading, I think there going to be two new libraries for this purpose in the standard. Concepts are an even bigger change coming, and they are somewhat related to templates. Up until now we had concepts in the STL, but these were conventions; an algorithm would make assumptions about a type you pass to a template, and you’d know to pass the correct ‘type of type’ because of the conventions. This implied terribly error messages, the STL template errors we all know and ‘love’. Concepts will help solve these. There are other improvements (complexities) to the language. Herb Sutter talks about them a lot.