C++ is a multi-paradigm (procedural, object-oriented) geared towards adding Object Orientation to C. Born in the 80s and risen to the main stream in the 90s, C++ has been method of expressing many applications and server processes. Since the end of the first decade of the 21st century C++ has once again began evolving, adding many of the features of a modern application environment such as threads, type inference, and closures.
C++ produces object code which are early bound and eagerly linked. Type information is heavily used to resolve the name of the mangled symbols within the object code, needing symbol decipherment tools for developers not accustomed to the strategies of a given compiler. As a result of the name mangling, linking against C++ libraries have a number of operational concerns such as the fragile base class problem as well as interoperability problems with other compilers. Even when a library or application would be written in C++ many APIs were exported in C to get around this problem.
Many organizations idiomatically used a version of C++ common referred ot C+. The paradigms utilized by the programmers were still very much C, with some of the C++ extensions thrown in. The range in which the C++ features were used very highly between projects, from the code looking very much like C to full utilization of the standard library.
- C++ shared libraries should be used with care. Due to name mangling this could result in runtime errors.
- Although C++ was a relatively stable language with many compiler extensions through the 2000s, in the 2010s the language has began rapidly evolving. So far three major revisions have been release: C++11, C++14, and C++ 17. C++11 contained many features considered standard for the application programming space, including threads. There were attempts to improve the memory management stories however in C++14 they introduced a new set of features to properly handle those.