Having started to use C++11, I'd say that the most fundamental way of looking at it is that it makes C++ a much more usable language. This isn't to say that it makes it a simpler language--there are lots of new features--but it provides a lot of functionality that makes it easier to program. Let's look at one example, the auto keyword.


In C++11, if the compiler is able to determine the type of a variable from its initialization, you don't need to provide the type. For example, you can write code such as

Code:
int x = 3;
auto y = x;
and the compiler will deduce that y is an int. This, of course, isn't a shining example of where auto is really useful. Auto really comes into its own when working with templates and especially the STL. Why is that? Imagine working with an iterator:

Code:
map<string, string> address_book;
address_book[ "Alex" ] = "[email protected]";
// add a bunch of people to address_book
Now you want to iterate over the elements of the address_book. To do it, you need an iterator:

Code:
map<string, string>::iterator itr = address_book.begin();
That's an awfully long type declaration for something that you already know the type of! Wouldn't it be nice to simply write:

Code:
auto itr = address_book.begin();
The code is much shorter, and frankly, it's more readable, not less, because the template syntax obscures everything else on that line. This is one of my favorite new features, and hard-to-track-down compiler errors, and just generally saves time without losing expressiveness.