for
do-while
inline
noexcept
throw
try
catch
const
volatile
typedef
new
delete
this
friend
override
final
This is a reference of the core C++ language constructs.
Basic concepts
CommentsASCII chartPunctuationNames and identifiersTypes – Fundamental typesObject – Scope – LifetimeDefinitions and ODRName lookup qualified – unqualified (ADL)As-if ruleUndefined behavior (UB)Memory – Multithread(C++11)Character sets and encodingsPhases of translationThe main functionModules(C++20)Contracts(C++26)
main
Keywords
Preprocessor
#if - #ifdef - #ifndef - #elif#elifdef - #elifndef(C++23)#define - # - ###include - #pragma#line - #error#warning(C++23)
#if
#ifdef
#ifndef
#elif
#elifdef
#elifndef
#define
#
##
#include
#pragma
#line
#error
#warning
Expressions
Value categoriesEvaluation orderConstant expressionsOperators assignment – arithmetic increment and decrement logical – comparison member access call, comma, ternary sizeof – alignof(C++11) new – delete – typeid alternative representationDefault comparisons(C++20)Operator precedenceConversions implicit – explicit user-defined Usual arithmetic conversions static_cast – dynamic_cast const_cast reinterpret_castLiterals (Escape sequences) boolean – integer – floating character – string nullptr(C++11) user-defined (UDL)(C++11)
sizeof
alignof
typeid
static_cast
dynamic_cast
const_cast
reinterpret_cast
nullptr
Declarations
Conflicting declarationsStorage duration and linkageTranslation-unit-local(C++20)Language linkageNamespace declarationNamespace aliasReferences – Pointers – ArraysStructured bindings(C++17)Enumerations and enumeratorsinline specifierInline assemblyconst/volatileconstexpr(C++11)consteval(C++20)constinit(C++20)decltype(C++11)auto(C++11)typedef – Type alias(C++11)Elaborated type specifiersAttributes(C++11)alignas(C++11)static_assert(C++11)
constexpr
consteval
constinit
decltype
auto
alignas
static_assert
Initialization
Default-initializationValue-initializationCopy-initializationDirect-initializationAggregate initializationList-initialization(C++11)Reference initializationStatic non-local initialization zero – constantDynamic non-local initialization ordered – unorderedCopy elision (RVO)
Functions
Function declarationDefault argumentsVariadic argumentsLambda expression(C++11)Overload resolutionOperator overloadingAddress of an overload setCoroutines(C++20)Replacement functions
Statements
if – switchfor – range-for(C++11)while – do-whilecontinue – breakgoto – returncontract_assert(C++26)synchronized/atomic(TM TS)
if
switch
while
do
continue
break
goto
return
contract_assert
synchronized
atomic
Classes
Class types – Union typesinjected-class-nameData members – Bit-fieldsMember functions – The this pointerStatic members – Nested classesDerived class – using-declarationEmpty base optimization (EBO)Virtual function – Abstract class (ABC)override(C++11) – final(C++11)Member access – friendConstructors and member initializer listsDefault constructor – DestructorCopy constructor – Copy assignmentMove constructor(C++11)Move assignment(C++11)Converting constructorexplicit specifier
using
explicit
Templates
Template parametersTemplate argumentsClass template – Function templateVariable template(C++14)Class member templateTemplate argument deduction function – class (CTAD)(C++17)Explicit specialization – Partial specializationPacks(C++11) – sizeof...(C++11)Fold expressions(C++17)Pack indexing(C++26)Dependent names – SFINAEConstraints and concepts(C++20)Requires expression(C++20)
sizeof...
Exceptions
try blockThrowing exceptionsHandling exceptionsException specification noexcept specification(C++11) Dynamic specification(until C++17*)noexcept operator(C++11)
Miscellaneous
History of C++Extending the namespace stdAcronyms: AFO, CPO, IFNDR, NDR,NTBS, NTTP, RAO, SOCCC, TMP, TU
Idioms
Curiously Recurring Template Pattern (CRTP)Pointer to implementation (PIMPL)Resource acquisition is initialization (RAII)Rule of three/five/zeroZero-overhead principle