The C++ programming language has a history going back to 1979, when
Bjarne Stroustrup
was doing work for his Ph.D. thesis. One of the languages Stroustrup
had the opportunity to work with was a language called Simula, which as
the name implies is a language primarily designed for simulations.
The Simula 67 language
- which was the variant that Stroustrup worked with - is regarded as
the first language to support the object-oriented programming paradigm.
Stroustrup found that this paradigm was very useful for software
development, however the Simula language was far too slow for practical
use.
Shortly thereafter, he began work on "C with Classes", which as the name
implies was meant to be a superset of the C language. His goal was to
add object-oriented programming into the C language, which was and still
is a language well-respected for its portability without sacrificing
speed or low-level functionality. His language included classes, basic inheritance, inlining, default function arguments, and strong type checking in addition to all the features of the C language.
The first C with Classes compiler was called Cfront, which was derived
from a C compiler called CPre. It was a program designed to translate C
with Classes code to ordinary C. A rather interesting point worth noting
is that Cfront was written mostly in C with Classes, making it a
self-hosting compiler (a compiler that can compile itself). Cfront would
later be abandoned in 1993 after it became difficult to integrate new
features into it, namely C++ exceptions. Nonetheless, Cfront made a huge impact on the implementations of future compilers and on the Unix operating system.
In 1983, the name of the language was changed from C with Classes to
C++. The ++ operator in the C language is an operator for incrementing a
variable, which gives some insight into how Stroustrup regarded the
language. Many new features were added around this time, the most
notable of which are virtual functions, function overloading,
references with the & symbol, the const keyword, and single-line
comments using two forward slashes (which is a feature taken from the
language BCPL).
In 1985, Stroustrup's reference to the language entitled
The C++ Programming Language
was published. That same year, C++ was implemented as a commercial
product. The language was not officially standardized yet, making the
book a very important reference. The language was updated again in 1989
to include protected and static members, as well as inheritance from
several classes.
In 1990,
The Annotated C++ Reference Manual was released. The
same year, Borland's Turbo C++ compiler would be released as a
commercial product. Turbo C++ added a plethora of additional libraries
which would have a considerable impact on C++'s development. Although
Turbo C++'s last stable release was in 2006, the compiler is still
widely used.
In 1998, the C++ standards committee published the first international standard for
C++ ISO/IEC 14882:1998, which would be informally known as C++98.
The Annotated C++ Reference Manual was said to be a large influence in the development of the standard. The Standard Template Library,
which began its conceptual development in 1979, was also included. In
2003, the committee responded to multiple problems that were reported
with their 1998 standard, and revised it accordingly. The changed
language was dubbed
C++03.
In 2005, the C++ standards committee released a technical report (dubbed
TR1) detailing various features they were planning to add to the latest
C++ standard. The new standard was informally dubbed C++0x as it was
expected to be released sometime before the end of the first decade.
Ironically, however, the new standard would not be released until
mid-2011. Several technical reports were released up until then, and
some compilers began adding experimental support for the new features.
In mid-2011,
the new C++ standard (dubbed C++11) was finished. The
Boost library project
made a considerable impact on the new standard, and some of the new
modules were derived directly from the corresponding Boost libraries.
Some of the new features included regular expression support (details on
regular expressions may be found
here),
a comprehensive randomization library, a new C++ time library, atomic support, a standard threading library (which up until 2011 both C and
C++ were lacking), a new for loop
syntax providing functionality similar to foreach loops in certain
other languages, the auto keyword, new container classes, better support
for unions and array-initialization lists, and variance templates.