cpp / latest / language.html

C++ language

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 model and data races
Character sets and encodings
Phases of translation
The main function
Modules (C++20)

Keywords

Preprocessor

#if - #ifdef - #ifndef - #elif
#elifdef - #elifndef (C++23)
#define - # - ##
#include - #pragma
#line - #error
#warning (C++23)

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
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)

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)

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)

Statements

if – switch
for – range-for (C++11)
while – do-while
continue – break
goto – return
synchronized/atomic (TM TS)

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

Templates

Template parameters and arguments
Class template – Function template
Variable template (C++14)
Class member template
Template argument deduction
function – class (C++17)
Explicit specialization – Partial specialization
Parameter 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)

Exceptions

throw-expression
try-catch block
Function-try-block
Exception specification
noexcept specification (C++11)
Dynamic specification (until C++17*)
noexcept operator (C++11)

Miscellaneous

History of C++
Extending the namespace std
Acronyms: 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

See also

C documentation for C language constructs

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language