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
Comments ASCII chart Punctuation Names and identifiers Types – Fundamental types Object – Scope – Lifetime Definitions and ODR Name lookup qualified – unqualified (ADL) As-if rule Undefined behavior (UB) Memory – Multithread (C++11) Character sets and encodings Phases of translation The main function Modules (C++20) Contracts (C++26) Splice specifiers (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 categories Evaluation order Constant expressions Operators assignment – arithmetic increment and decrement logical – comparison member access call, comma, ternary sizeof – alignof (C++11) new – delete – typeid reflection (C++26) alternative representation Default comparisons (C++20) Operator precedence Conversions implicit – explicit user-defined Usual arithmetic conversions static_cast – dynamic_cast const_cast – reinterpret_cast Literals (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 declarations Storage duration and linkage Translation-unit-local (C++20) Language linkage Namespace declaration Namespace alias References – Pointers – Arrays Structured bindings (C++17) Enumerations and enumerators inline specifier Inline assembly const/volatile constexpr (C++11) consteval (C++20) constinit (C++20) decltype (C++11) auto (C++11) typedef – Type alias (C++11) Elaborated type specifiers Attributes (C++11) alignas (C++11) static_assert (C++11)
constexpr
consteval
constinit
decltype
auto
alignas
static_assert
Initialization
Default-initialization Value-initialization Copy-initialization Direct-initialization Aggregate initialization List-initialization (C++11) Reference initialization Static non-local initialization zero – constant Dynamic non-local initialization ordered – unordered Copy elision (RVO)
Functions
Function declaration Default arguments Variadic arguments Lambda expression (C++11) Overload resolution Operator overloading Address of an overload set Coroutines (C++20) Replacement functions
Statements
if – switch while – do-while for – range-for (C++11) template for (C++26) continue – break goto – return contract_assert (C++26) synchronized/atomic (TM TS)
if
switch
while
do
template for
continue
break
goto
return
contract_assert
synchronized
atomic
Classes
Class types – Union types injected-class-name Data members – Bit-fields Member functions – The this pointer Static members – Nested classes Derived class – using-declaration Empty base optimization (EBO) Virtual function – Abstract class (ABC) override (C++11) – final (C++11) Member access – friend Constructors and member initializer lists Default constructor – Destructor Copy constructor – Copy assignment Move constructor (C++11) Move assignment (C++11) Converting constructor explicit specifier
using
explicit
Templates
Template parameters and arguments Class template – Function template Variable template (C++14) Class member template Template argument deduction function – class (CTAD) (C++17) Explicit specialization – Partial specialization Packs (C++11) sizeof... (C++11) Fold expressions (C++17) Pack indexing (C++26) Dependent names – SFINAE Constraints and concepts (C++20) Requires expression (C++20)
sizeof...
Exceptions
try block Throwing exceptions Handling exceptions Exception specification noexcept specification (C++11) Dynamic specification (until C++17*) noexcept operator (C++11)
Miscellaneous
History of C++ Extending the namespace std Acronyms: 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/zero Zero-overhead principle