C++11

constexprmove constructormove constructorsmove semanticsnullptr constant2011 revision of the C++ StandardC++ (ISO 2011)C++11 strongly typed enumerationsC++11's move semantics
C++11 is a version of the standard for the programming language C++.wikipedia
213 Related Articles

C++17

C++17, C++11
It was approved by International Organization for Standardization (ISO) on 12 August 2011, replacing C++03, superseded by C++14 on 18 August 2014 and later, by C++17.
In that time period, the C++17 revision was also called C++1z, following C++0x or C++1x for C++11 and C++1y for C++14.

C++14

2014 standardC++C++2014
It was approved by International Organization for Standardization (ISO) on 12 August 2011, replacing C++03, superseded by C++14 on 18 August 2014 and later, by C++17.
It is intended to be a small extension over C++11, featuring mainly bug fixes and small improvements.

C++

C++ programming languageC++ standardC++ language
C++11 is a version of the standard for the programming language C++. Maintain stability and compatibility with C++98 and possibly with C
The C++ programming language was initially standardized in 1998 as ISO/IEC 14882:1998, which was then amended by the C++03, C++11 and C++14 standards.

C++ Standard Library

libstdc++standard libraryits standard library
Significant changes were also made to the C++ Standard Library, incorporating most of the C++ Technical Report 1 (TR1) libraries, except the library of mathematical special functions.
Previously sorting was only required to take O(n log n) on average, allowing the use of quicksort, which is fast in practice but has poor worst-case performance, but introsort was introduced to allow both fast average performance and optimal worst-case complexity, and as of C++11, sorting is guaranteed to be at worst linearithmic.

Anonymous function

lambda expressionlambda expressionsanonymous functions
C++11 provides the ability to create anonymous functions, called lambda functions.
For example, the ML languages are statically typed and fundamentally include anonymous functions, and Delphi, a dialect of Object Pascal, has been extended to support anonymous functions, as has C++ (by the C++11 standard).

C++03

ISO/IEC C++03
It was approved by International Organization for Standardization (ISO) on 12 August 2011, replacing C++03, superseded by C++14 on 18 August 2014 and later, by C++17.
C++03 replaced the prior revision of the C++ standard, called C++98, and was later replaced by C++11.

C (programming language)

CC programming languageC language
Maintain stability and compatibility with C++98 and possibly with C
The C compiler in Microsoft Visual C++, however, implements the C89 standard and those parts of C99 that are required for compatibility with C++11.

Generic programming

genericgenericstemplates
Areas of the core language that were significantly improved include multithreading support, generic programming support, uniform initialization, and performance. Many algorithms can operate on different types of data; C++'s templates support generic programming and make code more compact and useful.
Most modern compilers however now have fairly robust and standard template support, and the new C++ standard, C++11, further addresses these issues.

Copy elision

return value optimizationelision
(For simplicity, this discussion neglects the return value optimization.)
In the current revision of the C++ standard (C++11), the issues have been addressed, essentially allowing both the copy from the named object to the exception object, and the copy into the object declared in the exception handler to be elided.

Value (computer science)

valuevalueslvalue
In C++03 (and before), temporaries (termed "rvalues", as they often lie on the right side of an assignment) were intended to never be modifiable — just as in C — and were considered to be indistinguishable from types; nevertheless, in some cases, temporaries could have been modified, a behavior that was even considered to be a useful loophole.
In C++11 a special semantic-glyph exists, to denote the use/access of the expression's address for the compiler only; i.e., the address cannot be retrieved using the address-of,, operator during the run-time of the program (see the use of move semantics).

C++ Technical Report 1

TR1C++ Standards Committee's Library Technical ReportC++ Technical Report 2
Significant changes were also made to the C++ Standard Library, incorporating most of the C++ Technical Report 1 (TR1) libraries, except the library of mathematical special functions.
However, most of its proposals became part of the later official standard, C++11.

Thread-local storage

thread-localthread local storageThread-specific storage
A new thread-local storage duration (in addition to the existing static, dynamic and automatic) is indicated by the storage specifier.
C++11 introduces the keyword which can be used in the following cases

String literal

stringraw stringliteral string
C++03 offers two kinds of string literals.
Although this notation is more flexible, few languages support it; other than Perl, Ruby (influenced by Perl) and C++11 also support these.

Compile time function execution

Compile time expressionscompile-time executionCompile-Time Function Execution
Constant expressions are optimization opportunities for compilers, and compilers frequently execute them at compile time and hardcode the results in the program.
In C++11, this technique is known as generalized constant expressions.

Special member functions

special member function
If a member has a non trivial special member function, the compiler will not generate the equivalent member function for the and it must be manually defined.
Move constructor if no copy constructor, copy assignment operator, move assignment operator and destructor are explicitly declared.

Futures and promises

futurespromisesfuture
The C++11 thread library also includes futures and promises for passing asynchronous results between threads, and for wrapping up a function call that can generate such an asynchronous result.
In C++11 a provides a read-only view. The value is set directly by using a, or set to the result of a function call using or.

Closure (computer programming)

closureclosureslexical closure
A lambda can optionally be a closure.
They may be created at runtime and may contain state, but they do not implicitly capture local variables as closures do. As of the 2011 revision, the C++ language also supports closures, which are a type of function object constructed automatically from a special language construct called lambda-expression.

Variadic template

parameter packvariable number of argumentsvariadic
An alternative mechanism for processing integer and floating point raw literals is via a variadic template:
Variadic templates are supported by C++ (since the C++11 standard), and the D programming language.

Function object

functorfunction objectsfunctors
A thread class is provided, which takes a function object (and an optional series of arguments to pass to it) to run in the new thread.
In C++11, the lambda expression provides a more succinct way to do the same thing.

Most vexing parse

The traditional constructor syntax, for example, can look like a function declaration, and steps must be taken to ensure that the compiler's most vexing parse rule will not mistake it for such.
Using the new uniform initialization syntax introduced in C++11 solves this issue.

Allocator (C++)

allocatorsAllocatorC++ allocators
Among the many areas of improvement considered were standard library allocators.
The 2011 revision of the C++ Standard removed the weasel words requiring that allocators of a given type always compare equal and use normal pointers.

Resource acquisition is initialization

RAIIclosure blocksRAII (Resource Acquisition is Initialization)
These are accessible via Resource Acquisition Is Initialization (RAII) locks ( and ) and locking algorithms for easy use.
The following C++11 example demonstrates usage of RAII for file access and mutex locking:

Assertion (software development)

assertionsassertionassert
C++03 provides two methods to test assertions: the macro and the preprocessor directive.
C11 and C++11 support static assertions directly through.

Standard Template Library

STLC++ Standard Template LibraryC++ STL
The new classes fulfill all the requirements of a container class, and have all the methods needed to access elements:,,,.
Initialization of STL containers with constants within the source code is not as easy as data structures inherited from C (addressed in C++11 with initializer lists).

Template (C++)

templatetemplatesC++ templates
Many algorithms can operate on different types of data; C++'s templates support generic programming and make code more compact and useful.
Since C++11, templates may be either variadic or non-variadic; in earlier versions of C++ they are always non-variadic.