Skip to content
Free public beta until December 4, 2026: every course is open, no card needed. After that, the first chapter of each course stays free and full access is a one-time $39 ($19 for up to 100 founding members chosen for helpful feedback). Your progress is kept. How the beta works

Glossary

Every defined term in this course, A–Z.

[[nodiscard]]

Read the section →

An attribute that warns if a caller ignores the return value.

abbreviated function template

Read the section →

A function with an auto parameter, which is secretly a template (C++20).

The binary-level contract that lets separately compiled code work together.

absolute path

Read the section →

A path that starts from the top of the file system.

abstract class

Read the section →

A class you cannot create objects of, because it has a pure virtual function.

access specifier

Read the section →

public, private, or protected: who may use a class member.

active alternative

Read the section →

The type a std::variant currently holds.

The number that says where an object sits in memory.

address-of operator

Read the section →

The unary & that gives an object's address.

AddressSanitizer

Read the section →

A compiler option that makes memory bugs crash loudly with a report.

A simple struct or array that can be initialized member by member with braces.

A standard function like std::sort or std::find that works on a range.

A second name for the same thing.

Averaged over a long sequence of operations.

The functions and types code can call: the contract at the source level.

The actual value passed to a function in a call.

arithmetic conversions

Read the section →

The rules that bring mixed number types to a common type before arithmetic.

arrange, act, assert

Read the section →

The three parts of a test: set up, do the thing, check the result.

A fixed number of elements of one type, stored side by side.

array decay

Read the section →

A built-in array turning into a pointer to its first element.

Human-readable text form of machine instructions.

A check that fails, loudly, if a condition is false.

Replacing the value of a variable that already exists.

associativity

Read the section →

The rule that groups operators of the same precedence, left to right or right to left.

An operation, or a std::atomic variable, that no other thread can see half-done.

A [[...]] annotation that gives the compiler extra information.

A keyword that lets the compiler work out a variable's type from its initializer.

automated test

Read the section →

Code that checks your code and reports pass or fail by itself.

automatic storage duration

Read the section →

Created when its block starts running, destroyed when it ends.

The case a recursive function answers directly, without recursing.

The class another class inherits from.

In vcpkg, a registry snapshot that fixes the version of every package.

basic guarantee

Read the section →

After an exception, nothing leaks and every object is still valid.

bidirectional iterator

Read the section →

An iterator that can step forward or back, one element at a time.

Notation for how an algorithm's cost grows with the size of its input.

binary cache

Read the section →

Stored builds of packages so they need not be recompiled.

binary file

Read the section →

A file of raw bytes, not meant to be read as text.

binary heap

Read the section →

A tree stored in an array where each parent is ordered before its children.

bitwise operator

Read the section →

An operator such as &, |, ^ or ~ that works on each bit of an integer separately.

Code between { and }, which starts a new scope.

bounds checking

Read the section →

Checking an index is valid before using it.

brace initialization

Read the section →

Initializing with braces, as in int n{5};, which forbids narrowing.

A named line of development that can move ahead separately.

breaking change

Read the section →

A change that makes existing code stop compiling or behave differently.

A marker that makes the debugger pause the program on a line.

One slot of a hash table, holding the entries whose keys hash there.

Temporary memory where data collects before being written or processed.

buffer overflow

Read the section →

Writing past the end of a block of memory.

build configuration

Read the section →

A named set of build settings, such as Debug or Release.

build system

Read the section →

A tool that works out which files to compile and runs the commands.

The folder where CMake writes generated files and build output.

Looping constantly to check a condition, burning CPU while waiting.

The smallest addressable unit of memory: 8 bits on every mainstream platform.

A character array ended by a zero byte, the way C stores text.

C++ Core Guidelines

Read the section →

A widely used set of rules for writing modern, safe C++.

C++ standard

Read the section →

The official document that defines the C++ language and library.

call operator

Read the section →

The operator() member that runs when an object is called like a function.

The chain of function calls that are currently in progress.

A function you hand to other code for it to call later.

calling convention

Read the section →

The rules for how arguments and return values are passed between functions.

How many elements a vector has room for before it must grow.

How a lambda gets access to variables from the surrounding code.

A C++ test framework with natural-looking assertions.

A single letter, digit, or symbol of text.

checked mode

Read the section →

A standard-library build mode that catches misuse of iterators and indexes.

The LLVM project's C, C++, and Objective-C compiler, standard on macOS.

Clang with MSVC-compatible command-line options, for Windows.

clang-format

Read the section →

A tool that rewrites C++ code into a consistent format.

A Clang-based linter that checks for bugs and style problems and can fix some.

A user-defined type that bundles data with the functions that act on it.

class template

Read the section →

A class written once for any type, like std::vector<T>.

class template argument deduction

Read the section →

Letting the compiler deduce a class template's arguments from a constructor call (C++17).

JetBrains' cross-platform C++ IDE, built around CMake.

A source of the current time: system, steady, or high-resolution.

The object a lambda expression creates, holding its captured values.

A cross-platform tool that generates build files from one project description.

CMake Tools

Read the section →

The VS Code extension that configures, builds, and debugs CMake projects.

CMakeLists.txt

Read the section →

The file that describes a CMake project: its targets, sources, and settings.

CMakePresets.json

Read the section →

The checked-in file that holds a project's CMake presets.

code review

Read the section →

Teammates reading a change before it is merged.

A line you type in a terminal to make something happen.

command-line argument

Read the section →

A word typed after a program's name when it is started, handed to main.

A note in source code that the compiler ignores.

A saved snapshot of the project, with a message saying what changed.

A function that says whether one element should come before another.

comparison operator

Read the section →

An operator like <, ==, or != that compares two values and gives bool.

compile error

Read the section →

The compiler found code that breaks the language rules.

compiled language

Read the section →

A language whose programs are translated to machine code before they run.

The program that translates C++ source code into machine code.

compiler cache

Read the section →

A tool that reuses compiler output when the same file is compiled again.

compiler driver

Read the section →

The command (g++, clang++, cl) that runs every build stage for you.

compiler extensions

Read the section →

Features one compiler accepts that are not standard C++.

composition

Read the section →

Building a class out of member objects rather than by inheriting.

compound assignment

Read the section →

An operator like += that updates a variable using its own value.

A C and C++ package manager that can download prebuilt binaries.

Conan profile

Read the section →

Conan's description of the compiler and settings a build uses.

A named, compile-time test of what a type must support.

condition variable

Read the section →

A way for a thread to sleep until another thread says something changed.

conditional breakpoint

Read the section →

A breakpoint that pauses only when a condition you give is true.

conditional operator

Read the section →

The cond ? a : b operator: an if-else that produces a value.

config file

Read the section →

The NameConfig.cmake file that lets find_package find an installed library.

The CMake step that reads CMakeLists.txt and writes the build files.

A keyword that makes a variable read-only after it is initialized.

const correctness

Read the section →

Marking everything const that should not change, and letting the compiler check it.

const iterator

Read the section →

An iterator that lets you read elements but not change them.

const member function

Read the section →

A member function that promises not to change the object.

const reference

Read the section →

A read-only alias, the usual way to pass large objects.

constant expression

Read the section →

An expression the compiler can evaluate while compiling.

constant time

Read the section →

Takes the same time however big the data is: O(1).

Marks a function that must run at compile time.

A keyword asking for a value, or a function, to be usable at compile time.

A requirement a template argument must meet for the template to be used.

constructor

Read the section →

A special member function that initializes a new object.

A standard-library object that holds a collection of elements.

container adaptor

Read the section →

A restricted interface over another container, like a stack or queue.

Stored next to each other in memory, with no gaps.

continuous integration

Read the section →

Building and testing every change automatically on a server.

What a function promises and what it requires of its callers.

control block

Read the section →

The hidden bookkeeping a std::shared_ptr keeps next to its object.

conversion operator

Read the section →

A member function that says how to turn an object into another type, such as bool.

copy assignment operator

Read the section →

The operator= that overwrites an existing object with a copy of another.

copy constructor

Read the section →

The constructor that makes a new object as a copy of an existing one.

copy elision

Read the section →

The compiler building a returned object directly in its destination, with no copy or move.

copy initialization

Read the section →

Initializing with =, as in int n = 5;.

copy-and-swap

Read the section →

Writing assignment as: copy the argument, then swap contents with it.

A function that can pause and later resume where it left off (C++20).

Which lines of code your tests actually ran.

An open-source static analyzer for C and C++.

Small, fast memory near the processor that holds recently used data.

critical section

Read the section →

Code that touches shared data and must run in only one thread at a time.

Comma-separated values: a plain-text table, one record per line.

CMake's test runner.

current directory

Read the section →

The folder a terminal, or a running program, is working in.

Referring to an object that no longer exists.

dangling pointer

Read the section →

A pointer to memory whose object has already been destroyed.

data member

Read the section →

A variable that is part of each object of a struct or class.

Two threads touching the same data at once, at least one writing, without synchronization.

De Morgan's rules

Read the section →

Rules for moving a ! inside: negate each part and swap && with ||.

Threads each waiting for a lock another holds, so none can continue.

Debug build

Read the section →

A build with no optimization and full debug information, for development.

debug information

Read the section →

Extra data in a build that maps machine code back to your source.

A tool that pauses a running program so you can inspect it.

declaration

Read the section →

A statement that introduces a name and its type.

A copy that duplicates the pointed-to data too.

default argument

Read the section →

A value a parameter uses when the caller leaves it out.

default constructor

Read the section →

The constructor that takes no arguments.

default member initializer

Read the section →

A value written next to a member's declaration, used unless a constructor sets it.

default visibility

Read the section →

Whether a shared library's symbols are exported unless you say otherwise.

A declaration that also supplies the thing itself: the body or the storage.

definition of done

Read the section →

The checklist a change must pass before it counts as finished.

delegating constructor

Read the section →

A constructor that hands the whole setup job to another constructor of the same class.

deleted function

Read the section →

A function declared = delete so that any use of it is a compile error.

The function a smart pointer calls to release what it owns.

A library your project needs in order to build or run.

deprecation

Read the section →

Marking something as still working but scheduled for removal.

std::deque: a double-ended queue, fast to add or remove at both ends.

dereference

Read the section →

Follow a pointer to the object it points at.

derived class

Read the section →

A class that inherits from another.

designated initializer

Read the section →

Naming members when brace-initializing an aggregate, as in {.x = 1} (C++20).

A special member function that runs automatically when an object is destroyed.

Developer PowerShell for VS

Read the section →

A PowerShell window with the MSVC compiler already on its path.

A message from the compiler about your code: an error or a warning.

A listing of exactly which lines changed between two versions.

A folder: a named container for files and other folders.

distribution

Read the section →

An object that turns an engine's raw bits into numbers of a given shape and range.

do-while loop

Read the section →

A loop that runs its body first and tests its condition at the bottom.

A very lightweight, single-header C++ test framework.

double free

Read the section →

Freeing the same memory twice: undefined behavior.

A conversion from a base-class pointer or reference to a derived-class one.

A tool that generates reference documentation from comments in code.

A length of time, with its units in the type: std::chrono::milliseconds.

dynamic dispatch

Read the section →

Picking which function body to run based on the object's actual type.

dynamic type

Read the section →

The actual type of the object at run time.

early return

Read the section →

Leaving a function as soon as the answer is known.

An input at the boundary of what the code handles: empty, zero, maximum.

EditorConfig

Read the section →

A file that tells editors basic settings such as indentation and line endings.

One item stored in an array or container.

The rule for storing text characters as bytes.

end of file

Read the section →

The point where there is no more input to read.

The order in which a number's bytes are stored in memory.

enumeration

Read the section →

A type whose values are a fixed list of named choices.

One of the named values listed inside an enum.

environment variable

Read the section →

A named setting, such as HOME or PATH, that every program inherits when it starts.

The starting moment a clock counts its time points from.

erase-remove idiom

Read the section →

The pre-C++20 two-step for deleting matching elements from a vector.

An object thrown to signal an error, which unwinds the stack until caught.

A file the operating system can run as a program.

The number a program hands back to the system when it ends.

explicit constructor

Read the section →

A constructor marked explicit so it is never used for silent conversions.

explicit conversion

Read the section →

A conversion you write out on purpose, with a cast.

export macro

Read the section →

A macro such as MYLIB_EXPORT that marks declarations as part of a library's API.

A named group of installed targets that CMake writes a targets file for.

export table

Read the section →

The list of symbols a shared library makes available to other programs.

A piece of code that produces a value, like a + b or f(x).

The dot-and-letters ending of a file name, like .cpp.

Declares functions with C linkage: no name mangling, callable from C.

extraction operator

Read the section →

The >> operator that reads a value from a stream.

The flag a stream sets when a read or write did not work.

fall-through

Read the section →

In a switch, running on into the next case because break is missing.

false positive

Read the section →

A tool warning about a problem that isn't really there.

fast-forward

Read the section →

A merge where Git just moves the branch pointer ahead.

FetchContent

Read the section →

A CMake module that downloads a dependency's source and builds it with your project.

A CMake list of a target's headers, which knows how to install them.

file stream

Read the section →

A stream connected to a file: std::ifstream or std::ofstream.

file system

Read the section →

The operating system's tree of folders and files.

final specifier

Read the section →

A keyword that stops further overriding or inheriting.

find_package

Read the section →

The CMake command that locates an installed library.

fixed-width integer

Read the section →

An integer type of an exact size, such as std::int32_t.

Shared setup that several tests start from.

An option on a command line that changes how a tool behaves.

floating-point

Read the section →

A number type for fractions, such as double, stored as an approximation.

fold expression

Read the section →

A C++17 expression that applies an operator across every element of a parameter pack.

format specification

Read the section →

The part after the colon in {:...} that sets width, precision, and alignment.

format string

Read the section →

A string with {} placeholders that std::format or std::print fills in.

forward declaration

Read the section →

Declaring a class's name without its definition, as in class Engine;.

forward iterator

Read the section →

An iterator that can only step ahead, one element at a time.

forwarding reference

Read the section →

A T&& parameter with T deduced, which binds to lvalues and rvalues alike.

free function

Read the section →

A function that is not a member of any class.

A function or class a class lets see its private members.

full specialization

Read the section →

A specialization that fills in every template argument, written after template <>.

A named block of code that takes inputs, does a job, and can return a result.

function call

Read the section →

Running a function, by writing its name followed by arguments in parentheses.

function object

Read the section →

An object you can call like a function, because its class defines operator().

function overloading

Read the section →

Several functions sharing one name, told apart by their parameters.

function pointer

Read the section →

A pointer that holds the address of a function.

function template

Read the section →

A function written once for any type, with the type as a parameter.

fundamental type

Read the section →

A type built into the language, such as int, double, char, or bool.

The GNU Compiler Collection, the standard compiler on most Linux systems.

The GNU command-line debugger, used with GCC on Linux.

The kind of build files CMake writes: Ninja, Makefiles, Visual Studio, or Xcode.

generator expression

Read the section →

A $<...> CMake expression evaluated at build-generation time, per configuration.

generic lambda

Read the section →

A lambda with auto parameters, which works for any argument type.

A member function that returns a private member's value.

The most widely used version control system.

GitHub Actions

Read the section →

GitHub's built-in continuous integration service.

global namespace

Read the section →

The outermost namespace, where names outside any namespace block live.

global state

Read the section →

Data that any part of the program can read or change.

global variable

Read the section →

A variable declared outside every function, visible to the whole file or program.

Google's C++ test framework.

half-open range

Read the section →

A range that includes its start but stops just before its end: [first, last).

A catch clause: the code that runs when a matching exception arrives.

The relationship composition expresses: a Car has an Engine.

The long hexadecimal ID that names a commit.

hash collision

Read the section →

Two different keys landing in the same bucket.

hash function

Read the section →

A function that turns a key into a number used to pick a bucket.

A table that finds values by computing a slot number from the key.

A small callable struct that turns a key into a hash number for an unordered container.

header-only library

Read the section →

A library delivered entirely as headers, with nothing to link.

The memory area for objects you create and destroy on demand.

hidden friend

Read the section →

A friend function defined inside the class, found only through its arguments.

An editor that also builds, runs, and debugs your code.

Doing it twice has the same effect as doing it once.

if-else chain

Read the section →

A sequence of if/else if tests where only the first true branch runs.

Not a valid C++ program by the standard's rules.

implementation-defined behavior

Read the section →

Behavior the standard leaves to each compiler, which must document its choice.

implicit conversion

Read the section →

A type conversion the compiler does for you without being asked.

import library

Read the section →

On Windows, the small .lib you link to use a DLL.

imported target

Read the section →

A CMake target that stands for a library built outside your project.

include guard

Read the section →

#ifndef/#define/#endif lines that stop a header being pasted in twice.

include what you use

Read the section →

Include the header for everything a file uses directly.

incomplete type

Read the section →

A type that has been declared but not yet defined.

incremental build

Read the section →

Rebuilding only what changed since the last build.

indeterminate value

Read the section →

The garbage an uninitialized local variable holds.

An element's position, counting from 0.

inheritance

Read the section →

Defining a new class as an extension of an existing one.

inheriting constructor

Read the section →

A using-declaration that lets a derived class be built the same ways as its base.

init capture

Read the section →

A capture that creates and initializes a new variable inside the lambda.

initialization

Read the section →

Giving a variable its first value when it is created.

A keyword that allows identical definitions in several translation units.

inline variable

Read the section →

A variable marked inline (C++17) so a header can define one object shared by every file.

The optimizer copying a function's body into its caller.

input validation

Read the section →

Checking input is usable before trusting it.

install name

Read the section →

On macOS, the path a dynamic library tells programs to load it from.

install prefix

Read the section →

The root folder a project installs into.

instantiation

Read the section →

The compiler generating real code from a template for specific arguments.

instrumentation

Read the section →

Extra checking code the compiler inserts into your program.

A whole number, with no fractional part.

integer division

Read the section →

Division of two whole numbers that keeps only the whole part, so 7 / 2 is 3.

The set of operations code may use, without saying how they work.

interface library

Read the section →

A CMake target with no compiled code, only settings to pass on.

internal linkage

Read the section →

Visible only inside its own translation unit.

A rule about an object's data that must always hold.

The relationship public inheritance should express: a Circle is a Shape.

Itanium C++ ABI

Read the section →

The C++ ABI used by GCC and Clang on Linux and macOS.

An object that marks a position in a container and can move to the next one.

iterator category

Read the section →

The group an iterator belongs to, which says what moves it allows.

iterator invalidation

Read the section →

A container change that leaves existing iterators, pointers, or references pointing at stale memory.

joining a thread

Read the section →

Wait for a thread to finish.

key-value pair

Read the section →

An entry that pairs a lookup key with its stored value.

In VS Code's CMake Tools, the compiler you choose to build with.

A small unnamed function written right where it is used.

language mode

Read the section →

The C++ edition the compiler is told to follow, such as C++20.

lazy evaluation

Read the section →

Computing each result only when it is asked for.

LeakSanitizer

Read the section →

A sanitizer that lists heap memory never freed when the program exits.

Prewritten, compiled code your program can use.

GCC's implementation of the C++ standard library.

The legal terms under which code may be used and shared.

The period during run time when an object exists.

line ending

Read the section →

The character(s) marking the end of a line: \n or \r\n.

linear time

Read the section →

Time grows in step with the size of the data: O(n).

Whether a name refers to the same thing in other .cpp files.

linked list

Read the section →

A chain of nodes, each holding one element and a link to the next.

The tool that joins object files and libraries into one program.

Linux distribution

Read the section →

A packaged version of Linux, such as Ubuntu or Fedora.

The LLVM debugger, standard on macOS and used with Clang.

load factor

Read the section →

The average number of elements per bucket.

The part of the operating system that starts a program running.

Implemented with hardware atomic instructions rather than a hidden mutex.

A file recording exact dependency versions so every build uses the same ones.

logic error

Read the section →

The program runs without complaint but gives the wrong answer.

logical operator

Read the section →

An operator that combines true/false values: &&, ||, !.

lost wakeup

Read the section →

A notification sent before the other thread started waiting, and so missed.

An expression that names an object with an identity, like a variable.

A preprocessor name that is replaced by text before compiling.

The build script read by make: rules for building files from other files.

manifest mode

Read the section →

vcpkg reading a project's dependencies from its own vcpkg.json.

A CI setup that runs the same job across several OSes or compilers.

member function

Read the section →

A function declared inside a class that works on one object of it.

member initializer list

Read the section →

The : member(value), ... part of a constructor that initializes members directly.

memberwise copy

Read the section →

Copying an object by copying each member in turn.

memory leak

Read the section →

Heap memory that is never freed because nothing remembers it.

memory order

Read the section →

Rules for what other memory changes an atomic operation makes visible to other threads.

memory view

Read the section →

A debugger panel showing raw bytes at an address.

Combining the changes from two branches.

merge conflict

Read the section →

Two branches changed the same lines, and Git needs you to choose.

Mersenne Twister

Read the section →

A well-known pseudo-random engine: std::mt19937.

micro-benchmark

Read the section →

A timing test of one small piece of code.

module pair

Read the section →

A header of declarations and a source file of definitions that share a name, like convert.h and convert.cpp.

module-definition file

Read the section →

A Windows .def file that lists which functions a DLL exports.

C++20's replacement for headers: compiled interfaces you import.

modulo bias

Read the section →

The unevenness from using rand() % n to pick a number.

most-derived class

Read the section →

The class of the complete object being built, at the bottom of the family tree.

move assignment operator

Read the section →

The operator= that replaces an object's contents by taking another's resources.

move constructor

Read the section →

The constructor that builds a new object by taking over another's resources.

move semantics

Read the section →

Transferring an object's resources instead of copying them.

move-only type

Read the section →

A type that can be moved but not copied, like std::unique_ptr.

The build system Visual Studio uses for its own projects.

Microsoft's C++ compiler, which comes with Visual Studio.

A Windows environment that provides GCC and Unix-style tools.

multi-config generator

Read the section →

A generator whose one build folder can build any configuration, chosen at build time.

multiple definition

Read the section →

A link error: two object files both define the same function or variable.

multiple inheritance

Read the section →

A class built on more than one base class at once.

A lock that lets only one thread at a time into a section of code.

name mangling

Read the section →

Encoding a C++ function's namespace and parameter types into its symbol name.

A named region that groups declarations and keeps their names apart.

namespace alias

Read the section →

A shorter name for a namespace, as in namespace fs = std::filesystem;.

namespace scope

Read the section →

Outside every function and class, directly inside a namespace.

naming convention

Read the section →

A project's rule for how names are spelled, such as snake_case.

narrowing conversion

Read the section →

A conversion that can lose information, like double to int.

nested loop

Read the section →

A loop inside another loop's body; the inner loop runs fully on every outer round.

nested type

Read the section →

A type declared inside a class, named like Outer::Inner.

network byte order

Read the section →

Big-endian: the byte order used by network protocols.

A small, fast build system that CMake can generate files for.

no diagnostic required

Read the section →

The program is broken, but the tools are not required to tell you.

One separately allocated piece of a linked structure, holding an element and links.

A promise that a function never throws.

Something the project deliberately will not do.

non-owning view

Read the section →

An object that looks at data it does not own and does not free.

non-type template parameter

Read the section →

A template parameter that is a value, like N in std::array<int, N>.

null character

Read the section →

The zero byte '\0' that marks the end of a C string.

null pointer

Read the section →

A pointer that deliberately points at nothing: nullptr.

Time grows very slowly: doubling the data adds about one step.

object file

Read the section →

The compiled machine code for one source file, not yet a program.

off-by-one error

Read the section →

A loop that runs one time too many or one too few.

one definition rule

Read the section →

Each function or variable may be defined once in the whole program.

one past the end

Read the section →

The position just after the last element: valid to point at, not to read.

opaque type

Read the section →

A type users can hold a pointer to but cannot see inside.

open addressing

Read the section →

A hash-table design that stores one entry per slot and, on a collision, tries the next slots until one is free.

Flags saying how to open a file: read, write, append, binary.

A value an operator acts on.

A symbol such as +, ==, or << that acts on values.

operator overloading

Read the section →

Defining what +, ==, <<, and other operators mean for your type.

out-of-source build

Read the section →

Keeping all build output in a separate folder from your source.

out-parameter

Read the section →

A reference parameter used to hand a result back to the caller.

A result too big (or too small) for its type to hold.

overload resolution

Read the section →

How the compiler picks which overload a call means.

A derived class's replacement for a virtual function; also the keyword that checks it.

Which object is responsible for freeing a resource.

Conan's hash identifying one specific binary build of a package.

package manager

Read the section →

A tool that downloads and installs software or libraries for you.

Unused bytes the compiler places inside a struct to align its members.

parallel build

Read the section →

Compiling several files at once, one per processor core.

A variable in a function's definition that receives an input.

parameter pack

Read the section →

A template parameter written with ... that stands for zero or more types or arguments.

partial specialization

Read the section →

A specialization of a class template for a pattern of arguments, such as any pointer.

pass by reference

Read the section →

The function works on the caller's own object, not a copy.

pass by value

Read the section →

The function gets its own copy of the argument.

The written address of a file or folder.

pattern rule

Read the section →

A Make rule that covers many files at once, such as %.o: %.cpp.

permissive license

Read the section →

A license that allows almost any use, as long as you keep the notice.

Hiding a class's private data behind a pointer to an implementation struct.

plain-text file

Read the section →

A file that holds only characters, with no hidden formatting.

The target machine and system a build is for, such as x64 Windows.

A variable that holds the address of another object.

pointer arithmetic

Read the section →

Adding to a pointer to move it along an array.

pointer to member

Read the section →

A value like &Item::price that names a member of a class, not of an object.

polymorphic

Read the section →

Describes a class with at least one virtual function.

A vcpkg recipe describing how to build one library.

position-independent code

Read the section →

Machine code that works wherever in memory it is loaded.

postfix increment

Read the section →

n++: produce the old value, then add 1.

The rules for which operator binds first when there are no parentheses.

precompiled header

Read the section →

A header the compiler has already processed and saved, to speed up builds.

precondition

Read the section →

Something that must be true before a function is called.

A function that answers yes or no about an element.

preferred separator

Read the section →

The platform's normal path separator: \ on Windows, / elsewhere.

prefix increment

Read the section →

++n: add 1 first, then produce the new value.

preprocessor

Read the section →

The first build step: it pastes in headers and handles # lines.

prerequisite

Read the section →

In a build rule, a file the target is made from.

A named, saved set of CMake settings, stored in CMakePresets.json.

primary template

Read the section →

The general definition of a template, used when no specialization matches.

The chip that actually carries out a program's instructions.

processor register

Read the section →

A tiny, very fast storage slot inside the processor.

A tool that measures where a program spends its time.

A set of instructions a computer can carry out.

programming language

Read the section →

A precise, written language for giving a computer instructions.

The set of source files and settings that build one program or library.

A function a ranges algorithm applies to each element before comparing it.

property page

Read the section →

Visual Studio's settings dialog for a project.

The part of a library its users are allowed to depend on.

public header

Read the section →

A header meant for users of a library.

pull request

Read the section →

A request to review and merge a branch's changes.

pure virtual function

Read the section →

A virtual function with no body in the base class, written = 0.

qualified name

Read the section →

A name written with its namespace or class, like std::vector.

A table whose rows have different lengths, such as a vector of vectors filled row by row.

Tie a resource's lifetime to an object: acquire in the constructor, release in the destructor.

random access

Read the section →

Jumping straight to any element by position, in one step.

random number engine

Read the section →

The source of raw pseudo-random bits, such as std::mt19937.

A sequence of elements you can iterate over, from a beginning to an end.

range adaptor

Read the section →

A view-maker you chain with |, like views::filter.

range-based for

Read the section →

A for loop that visits each element of a container in turn.

reallocation

Read the section →

A vector moving its elements into a new, bigger block of memory.

A function solving a problem by calling itself on a smaller case.

Write a failing test (red), then make it pass (green).

redefinition

Read the section →

A compile error: the same thing is defined twice in one file.

Another name for an existing object.

reference count

Read the section →

How many owners currently share an object.

reference cycle

Read the section →

Shared pointers that point at each other and so never reach zero.

reference semantics

Read the section →

Several names share one object, so a change through one shows through all.

A bug that returns, or a feature that stops working, after a change.

A hash table growing its bucket array and redistributing every element.

relative path

Read the section →

A path measured from the folder you are currently in.

Release build

Read the section →

An optimized build meant for real use.

relocatable

Read the section →

Still works after being moved to a different folder.

The leftover from whole-number division, written with %, so 7 % 2 is 1.

A copy of the repository hosted elsewhere, such as on GitHub.

A project folder together with its full version history.

requires clause

Read the section →

The requires condition attached to a template.

requires expression

Read the section →

A requires { ... } block listing the operations a type must support.

Anything that must be acquired and later given back: memory, a file, a lock.

return by value

Read the section →

The function returns its own copy of the result.

return value

Read the section →

The result a function hands back to its caller.

A search path stored inside a binary telling the loader where to find its shared libraries.

The record of each polymorphic object's real type that dynamic_cast and typeid read.

rule of five

Read the section →

A resource-managing class defines destructor, copy, and move operations together.

rule of three

Read the section →

If a class needs a custom destructor, copy constructor, or copy assignment, it needs all three.

rule of zero

Read the section →

Let members that manage themselves do the work, and write none of the five.

runtime environment

Read the section →

What a finished program needs while it runs, such as the operating system and shared libraries.

runtime error

Read the section →

A failure that happens while the program is running.

runtime library

Read the section →

The support library that compiled code relies on at run time.

An expression for a temporary, or an object about to be discarded.

rvalue reference

Read the section →

A T&& reference that binds only to rvalues, used to detect movable objects.

A compiler option that adds run-time checks and reports bugs as they happen.

The part of the code where a name can be used.

scope resolution operator

Read the section →

The :: that joins a namespace or class name to a member name.

The starting value that fixes which pseudo-random sequence an engine produces.

self-assignment

Read the section →

Assigning an object to itself, as in a = a;.

self-contained header

Read the section →

A header that compiles on its own, because it includes everything it needs.

semantic versioning

Read the section →

Version numbers MAJOR.MINOR.PATCH that signal what kind of change was made.

sentinel value

Read the section →

A special value like -1 or npos that means "not found" or "no result".

sequence container

Read the section →

A container that keeps elements in the order you put them.

A member function that changes a private member, checking the new value.

The word in a diagnostic that says how serious it is, such as error, warning, or note.

The pre-C++20 trick of disabling a template when substitution fails.

An inner name hiding an outer one with the same spelling.

shallow copy

Read the section →

A copy that shares the original's heap data instead of duplicating it.

shared library

Read the section →

A library loaded at run time and shared by programs: a DLL, .so, or .dylib.

shared ownership

Read the section →

Several owners jointly keep one object alive.

The program inside a terminal that reads and runs your commands.

short-circuit evaluation

Read the section →

&& and || stop as soon as the answer is known.

single-config generator

Read the section →

A generator whose build folder holds one configuration, chosen when you configure.

Copying a derived object into a base object, losing the derived part.

smart pointer

Read the section →

A class that owns a heap object and deletes it for you.

A quick check that the program starts and does the basics at all.

Visual Studio's container for one or more projects.

The name a Linux shared library says programs should load it by, such as libfoo.so.1.

source code

Read the section →

The text of a program, written by a person.

spaceship operator

Read the section →

The C++20 <=> operator, which compares two values in one go.

A short written description of what the program must do.

specialization

Read the section →

A separate definition of a template used instead of the general one for certain arguments.

A throwaway experiment to answer one question before committing to a design.

spurious wakeup

Read the section →

A waiting thread waking up even though nobody notified it.

stable sort

Read the section →

A sort that keeps equal elements in their original order.

The memory area for function-call frames and local variables.

stack frame

Read the section →

The block of stack memory one function call uses for its locals.

stack overflow

Read the section →

A crash from using up the call stack, often by recursing too deep.

stack trace

Read the section →

The list of calls that were active when something went wrong.

stack unwinding

Read the section →

Destroying local objects, frame by frame, as an exception travels up.

staging area

Read the section →

The list of changes chosen to go into the next commit.

Out of date: an input changed after the output was built.

standard input stream

Read the section →

The stream a program reads typed input from: std::cin.

standard library

Read the section →

The library of types and functions every C++ implementation provides.

standard output

Read the section →

The stream a program prints normal output to, usually the terminal.

state flags

Read the section →

The eof, fail, and bad bits a stream uses to report problems.

state machine

Read the section →

A design where a program is always in one of a few named states.

static analyzer

Read the section →

A tool that finds likely bugs by reading code, without running it.

static library

Read the section →

A bundle of object files copied into each program that links it.

static local variable

Read the section →

A local variable marked static that keeps its value between calls.

static member

Read the section →

A class member that belongs to the class as a whole, not to each object.

static storage duration

Read the section →

Lives for the whole run of the program.

static type

Read the section →

The type the compiler sees for an expression.

static typing

Read the section →

Every variable's type is fixed and checked before the program runs.

std::expected

Read the section →

A result that holds either a value or an error explaining why not (C++23).

std::filesystem::path

Read the section →

A type that holds a file path and handles separators for each platform.

std::function

Read the section →

A wrapper that can hold any callable with a given signature.

std::future

Read the section →

An object that will hold a result computed elsewhere, perhaps on another thread.

A container of key-value pairs, kept sorted by key.

A cast that marks an object as OK to move from. It moves nothing itself.

std::optional

Read the section →

A value that may or may not be present.

A container of unique values, kept sorted.

std::shared_ptr

Read the section →

A pointer whose object is shared and freed when the last owner goes away.

A pointer-and-length view of a contiguous run of elements (C++20).

std::string_view

Read the section →

A cheap, read-only window onto characters stored somewhere else.

std::unique_ptr

Read the section →

The single, movable owner of a heap object.

std::unordered_map

Read the section →

A hash table of key-value pairs: fast lookup, no ordering.

std::variant

Read the section →

A type-safe union: holds exactly one of several listed types at a time.

std::weak_ptr

Read the section →

A non-owning observer of a shared_ptr's object, used to break cycles.

Run the current line, stopping inside the first function it calls.

Run until the current function returns, then stop in its caller.

Run the current line, including any calls in it, and stop at the next line.

A flag a std::jthread passes to its function to ask it to stop.

storage duration

Read the section →

Rules for when an object's memory is created and freed.

A source or destination of characters you read from or write to in order.

string literal

Read the section →

Text written in double quotes in source code, such as "Hello, world!\n".

strong guarantee

Read the section →

After an exception, it is as if the operation never happened.

strong type

Read the section →

A small wrapper type that stops different kinds of values being mixed up.

A type that groups named data members together.

structured binding

Read the section →

Unpacking a struct, pair, or tuple into named variables in one declaration.

A placeholder function that compiles but does nothing real yet.

subsumption

Read the section →

The rule that picks the more constrained of two matching overloads.

symbol table

Read the section →

The list in an object file of names it defines and names it needs.

tagged union

Read the section →

A C-style struct holding a type tag plus a union of possible values.

Something a build produces, such as an executable or a library.

A pattern for a function or class with the types left as parameters.

template argument

Read the section →

The actual type or value filled in for a template parameter.

template argument deduction

Read the section →

The compiler working out template arguments from the function call's arguments.

template parameter

Read the section →

A placeholder in a template, such as T in template <typename T>.

An unnamed object created during an expression and destroyed soon after.

A text window where you type commands and read their output.

test framework

Read the section →

A library that makes writing, running, and reporting tests easy.

A tag on a CTest test so you can run a group of tests together.

Opening a file so line endings are converted for the platform.

this pointer

Read the section →

Inside a member function, this points at the object it was called on.

An independent path of execution running alongside others in the same program.

ThreadSanitizer

Read the section →

A sanitizer that detects data races between threads.

Signal an error by creating an exception and leaving the current function.

A moment in time on a particular clock.

How close two floating-point numbers must be to count as equal.

The set of tools that turn source code into a running program.

toolchain file

Read the section →

A CMake script, given at configure time, that sets up compilers or a package manager.

transitive dependency

Read the section →

A dependency of one of your dependencies.

transitive include

Read the section →

A header you get only because another header happened to include it.

translation phases

Read the section →

The ordered steps that turn source text into a program.

translation unit

Read the section →

One .cpp file plus everything it includes: what the compiler sees at once.

treat warnings as errors

Read the section →

Make every warning stop the build, so none are ignored.

vcpkg's name for a target platform and linkage, like x64-windows.

trivially copyable

Read the section →

A type that can be copied just by copying its bytes.

Empty a file when opening it.

Cutting off the fraction of a number instead of rounding, so 2.7 becomes 2.

Code wrapped in try { } whose exceptions the following handlers can catch.

What kind of value something is, which decides its size and what you can do with it.

A second name for an existing type.

A compile-time question about a type, or a type computed from another, from <type_traits>.

undefined behavior

Read the section →

Code the standard puts no requirements on: anything may happen.

UndefinedBehaviorSanitizer

Read the section →

A sanitizer that reports undefined behavior such as signed overflow.

underlying type

Read the section →

The integer type an enum is stored as.

A test of one small piece of code on its own.

unity build

Read the section →

Compiling several .cpp files glued together as one translation unit.

unnamed namespace

Read the section →

A namespace { ... } whose contents are private to one .cpp file.

unspecified behavior

Read the section →

One of several allowed outcomes, and the compiler need not tell you which.

usage message

Read the section →

A one-line summary of how to call a program, printed when it is called wrongly.

usage requirements

Read the section →

Settings a library passes on to whatever links it.

use after free

Read the section →

Accessing heap memory after it has been freed.

One sentence describing something a user wants to do, and why.

using-declaration

Read the section →

using std::cout;: makes one name usable without its prefix.

using-directive

Read the section →

using namespace std;: makes every name in a namespace usable unqualified.

The standard way to store Unicode text as bytes.

valid but unspecified

Read the section →

The state an object is left in after being moved from.

value category

Read the section →

Whether an expression names a lasting object (lvalue) or a temporary one (rvalue).

value initialization

Read the section →

Initializing with empty braces, which gives zero or the default.

value semantics

Read the section →

Copies are independent: changing one never changes another.

A named piece of memory that holds a value of one type.

variable-length array

Read the section →

An array whose size is set at run time: allowed in C, not in C++.

Microsoft's open-source C++ package manager.

std::vector: a resizable array that manages its own memory.

Copying a dependency's source code directly into your repository.

version control

Read the section →

Keeping a recorded history of every change to your project.

A lightweight range that presents elements without owning or copying them.

virtual destructor

Read the section →

A destructor declared virtual so deleting through a base pointer runs the right one.

virtual function

Read the section →

A member function a derived class can replace, chosen at run time.

A callable with one overload per alternative, passed to std::visit.

Visual Studio

Read the section →

Microsoft's IDE for Windows, which bundles the MSVC compiler.

Microsoft's free cross-platform code editor.

walking skeleton

Read the section →

The thinnest version of the program that builds, runs, and tests end to end.

wall-clock time

Read the section →

Real calendar time, what a clock on the wall shows.

A compiler message about code that is legal but probably wrong.

watch window

Read the section →

An expression the debugger re-evaluates and shows each time the program pauses.

A breakpoint that fires when a variable's value changes.

Spaces, tabs, and line breaks.

working tree

Read the section →

The files you actually see and edit in a repository.

The most work an operation can take for any input of a given size.

Apple's IDE for macOS, built on Clang.