What is C++11?
The discussion here is on the “what is?” question in the context of C++0x (aka the just released C++11 ).The examples will emphasize what’s new in C++0x, but the “commentary” will emphasize their place in the general C++ design philosophy.
What is C++0x? I don’t mean “How does C++0x differ from C++98?” I mean what kind of language is C++0x? What kinds of programming are C++0x good for? In fact, I could drop the “0x” right here and attack the fundamental question directly: What is C++?
Or, if you feel pedantic, “What will C++ be once we have the facilities offered by the upcoming standard?” This is not an innocent “just philosophical” question.
Consider how many programmers have been harmed by believing that “C++ is an object-oriented language” and “religiously” built all code into huge class hierarchies, missing out on simpler, more modular approaches and on generic programming.
Of course C++ also supports OOP, but a simple label – especially if supported by doctrinaire teaching – can do harm by overly narrowing a programmer’s view of what can be considered reasonable code.
This paper illustrates the power of C++ through some simple examples of C++0x code presented in the context of their role in C++. My aim is to give an idea of the breath of the facilities and an understanding of the aims of C++, rather than offering an in-depth understanding of any individual feature.
The list of language features and standard library facilities described is too long mention here, but a major theme is the role of features as building blocks for elegant and efficient software, especially software infrastructure components. The emphasis is on C++’s facilities for building lightweight abstractions.
To read this external content in full, download the full paper from the author archives.