Languages
C++
cppfaq
-
Method chaining (8.4) / Named Parameter Idiom (10.20)
-
Conversion constructor and conversion operator
-
Operator overloading (ch. 13)
-
Explicit constructor (10.22)
-
const (29.7) /
mutable
(18.13) /volatile
/restrict
-
v-table mechanism (20.4)
-
Pure virtual member functions (22.4), abstract base classes (ch. 22)
-
Covariant Return Types and "virtual constructor" (20.8, 22.5)
-
Object slicing (21.4, 31.8, 20.8)
-
Template Method pattern and private virtuals (23.4) (Virtuality by Herb Sutter)
-
Private inheritance (24.2, 24.3) (Uses and Abuses of Inheritance)
-
Static initialization order fiasco (10.14)
-
Meyer’s singleton (10.16)
-
-
C style
-
static_cast
-
dynamic_cast
-
const_cast cast away volatile, undefined behavior,
-
reinterpret_cast
-
-
Run-time type information (RTTI)
-
Pointer to member function
-
Diamond problem (25.8, 25.9) and multiple inheritance (ch. 25)
-
Templates (ch. 35)
-
Rule of three / five / zero, special member functions
-
Return value optimization (NRVO, RVO) (10.9) / Copy elision (C++ Cargo Cults)
-
Argument-dependant lookup (Koenig lookup)
-
non-dependent types and members (35.18, 35.19, 35.20)
-
Proxy template (35.22), in C++11 you would employ the Type alias declaration with
using
-
Type traits, concepts, tag dispatching (Generic Programming Techniques)
Marshall Cline’s cppfaq
-
ISOCPP FAQ
-
ISOCPP C++ Core Guidelines
-
Marshall Cline’s FAQ
-
Mirror of 2012 version: http://www.cs.technion.ac.il/users/yechiel/c++-faq/index.html
-
Mirror of 2006 version: http://www.dietmar-kuehl.de/mirror/c++-faq/
-
Mirror of 2003 version:: https://www.cs.rit.edu/~mjh/docs/c++-faq/
-
-
Classes and objects: 7.7
-
References: 8.3, 8.4, 8.6
-
Inline functions: 9.1, 9.5, 9.6, 9.7, 9.8, 9.9
-
Constructors: 10.3, 10.4, (10.5), 10.6, 10.8, (10.9), 10.10, (10.14), 10.20, (10.22)
-
Destructors: 11.7, 11.10, 11.14
-
Assignment operators: 12.3, 12.4
-
Operator overloading: 13.9, 13.10, 13.14, 13.15
-
Friends: 14.3, 14.5
-
Freestore management: 16.4, 16.8, 16.10, 16.21
-
Exceptions and error handling: 17.2, 17.3, 17.4, 17.8, 17.9, 17.10
-
Const correctness: 18.5, 18.7, 18.10, 18.12, (18.13), 18.15
-
virtual functions: 20.3, 20.4, 20.5, 20.6, (20.7), 20.8
-
proper inheritance and substitutability: (21.4), 21.6, 21.8, 21.12
-
abstract base classes (ABCs): 22.4, 22.5
-
Inheritance — what your mother never told you: 23.1, 23.3, 23.4, 23.5, (23.9)
-
private and protected inheritance: 24.2, 24.3, 24.5, 24.6
-
multiple and virtual inheritance: 25.4, 25.5, (25.9), 25.10
-
Built-in / intrinsic / primitive data types: 26.12, 26.13
-
Coding standards: 27.10
-
Newbie Questions / Answers: 29.5, 29.7, 29.17, 29.18, (29.19), 29.20
-
Templates: 35.2, 35.3, 35.4, (35.7), 35.9, 35.11, 35.16, 35.18, 35.19, 35.22
C++11
The book "Effective Modern C++" by Scott Meyers is a must-have.
-
Auto keyword and type deduction
-
Move semantics, rule of five
-
Reference collapsing
-
Reference qualifiers
-
Forwarding (AKA universal) references (Universal References in C++11 by Scott Meyers)
-
Perfect forwarding
-
Range-based for loops (and issues with
auto
and copying objects around) -
List initialization
STL
-
Smart Pointers
-
auto_ptr(deprecated)
Tricks/Gotchas/Hacks
Rust
WebAssembly
Go
Algorithms and Data Structures
-
Sorting and data structures (lists, arrays, hash tables)
-
About hash tables: linear probing, quadratic probing, leapfrog probing, double hashing, cuckoo hashing, hopscotch hashing
-
-
Floating point (29.17 and Random ASCII blog)
-
Tricks With the Floating-Point Format (representation)
-
Comparing Floating Point Numbers (ULP comparison)
-
That’s Not Normal–the Performance of Odd Floats (hole around zero, denormals)
-
-
Programming from the Ground Up by Jonathan Bartlett
-
Call stack, relocating code, dynamic libraries, data / bss / text segments
-
-
Custom allocator with pools
Design
Design patterns
OOAD and principles
-
Why OO sucks by Joe Armstrong
Data Oriented Design
-
Pitfalls of Object Oriented Programming (PDF) by Tony Albrecht (SCEE)
-
Typical C++ Bullshit by Mike Acton (Insomniac Games)
-
Culling the Battlefield (PDF) by Daniel Collin (Frostbite)
-
Multiprocessor Game Loops by Jason Gregory (Naughty Dog)
-
Parallelizing the Naughty Dog Engine Using Fibers (PDF) (GDC Vault video) by Christian Gyrling (Naughty Dog)
-
Memory Optimization (PDF) by Christer Ericson (Sony Santa Monica)
-
Introduction to Data Oriented Design (PDF) by Daniel Collin (DICE)
-
Data Locality (cache miss, branch misprediction, pipeline flush) from Game Programming Patterns by Robert Nystrom
-
Performance - Physics Optimization Strategies (PDF) by Sergiy Migdalskiy (Valve)
-
Roundup: Recent sketches on concurrency by Mike Acton (Insomniac Games)
-
Optimizing Software Occlusion Culling - Index by Fabian "ryg" Giesen
-
Practical Examples in Data Oriented Design by Niklas Frykholm (BitSquid)
-
What is Data-Oriented Game Engine Design? by David Davidović
-
Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP) by Noel Llopis
-
Data-Oriented Design book by Richard Fabian
-
Mike Acton’s review of
OgreNode.cpp
-
Memory by Omar Cornut
-
Load-Hit-Stores and the
__restrict
keyword by Elan Ruskin -
Sponsored Feature: Common Performance Issues in Game Programming by Becky Heineman
Microservices
Operating Systems
Linux
Multi-threading, Concurrency
One of the book on the topic is "The Art of Multiprocessor Programming" by Maurice Herlihy and Nir Shavit
-
Critical section, mutex, semaphore, Producer-consumer problem, Dining philosophers problem, Priority inversion, race condition
-
Atomics and lock-free programming (Preshing on Programming), Benaphore, ABA problem, Load-link/store-conditional, acquire and release semantics (Load-Acquire/Store-Release in the ARM Reference Manual)
-
Cache coherency, MOESI protocol, MESIF protocol, false sharing, branch misprediction, scratchpad memory
-
CPUs: How is branch prediction implemented in microprocessors?
-
Single Producer / Multiple Consumer
-
Lock-free queues
-
Aligning AoS to cache line size to avoid false sharing