C - gusenov/kb GitHub Wiki
- Standard C++
- General unofficial reference
- nextptr.com
- CppCon 2017 / “10 Things Junior C++ Devs Don't Get”
- Bjarne Stroustrup
- GCC online documentation
- Microsoft
- The Core C++ User Group
- Lessons learned about how to make a header-file library
- hackingcpp.com
- gibsjose/cpp-cheat-sheet: C++ Syntax, Data Structures, and Algorithms Cheat Sheet
- YouTube / Jamie King / C++ vPointers and vTables
- CodeProject / C++
- Хендбуки Академии Яндекса / Основы С++
- PVS‑Studio is a solution to enhance code quality, security (SAST), and safety
-
Practical Guide to Bare Metal C++
- arobenko/bare_metal_cpp_src source repository
- [GitBook)
- Table of Contents
- yet another insignificant Programming Notes
- C++ notes by Roger Mitton
- Red Hat Developer / Compare tools for C and C++ error checking
- Stack Overflow
- Open Standards
- Short-URL links to the C++ current working draft and draft standards, and committee papers
- timsong-cpp/cppwp: HTML version of the current C++ working paper
- MISRA
- MSVC's implementation of the C++ Standard Library
- Apache C++ Standard Library
- Standard C++ Library (1996)
- The Standard Library classes (such as
std::string
andstd::vector
) are not usually regarded as being able to be derived from. They are little black boxes whose functionality is clearly specified in the C++ Standard and which should not be redefined. - Stack Overflow
- LLVM C++ Standard Library
- GNU C++ Standard Library (libstdc++)
- opensource.apple.com/source/libcpp
- Boost Library Documentation
- POCO C++ Libraries Documentation
- Abseil
- cppreference.com / A list of open source C++ libraries
- IBM developerWorks / Technical topics / AIX and UNIX / Technical library / The Boost Serialization library
-
Dataflow 0.9.1 by Stjepan Rajko
- Dataflow programs can typically be expressed as a graph in which vertices represent components that process data, and edges represent the flow of data between the components. As such, dataflow programs can be easily reconfigured by changing the components and/or the connections.
- listing of all the public mailing lists on lists.boost.org
- Stepanov
- Expert C++. Become a proficient programmer by learning coding best practices with C++17 and C++20's latest features by Vardan Grigoryan, Shunguang Wu
- Software Architecture with C++. Design modern systems using effective architecture concepts, design patterns, and techniques with C++20 by Adrian Ostrowski, Piotr Gaczkowski
- Practical C++ Design from Programming to Architecture by Adam B. Singer
- C++ Cookbook by D. Ryan Stephens, Christopher Diggins, Jonathan Turkanis, and Jeff Cogswell
- introduction to computing systems. from bits & gates to C/C++ & beyond by Yale N. Patt, J. Patel - 800 pages
- C++ Coding Standards. 101 Rules, Guidelines, and Best Practices by Herb Sutter, Andrei Alexandrescu - 240 pages
- Large-Scale C++ Volume I: Process and Architecture by John Lakos - 1024 pages
- **Beautiful C++. 30 Core Guidelines for Writing Clean, Safe, and Fast Code ** by J. Guy Davidson, Kate Gregory - 352 pages
- Discovering Modern C++ by Peter Gottschling - 480 pages
- Идиомы и паттерны проектирования в современном С++. Применение современных паттернов проектирования к решению типичных задач на С++ для построения надежных приложений by Федор Г. Пикус - 452 страницы
- C++ Software Design: Design Principles and Patterns for High-Quality Software by Klaus Iglberger - 435 pages
-
Advanced C++ by Gazihan Alankus, Olena Lizina, Rakesh Mane, Vivek Nagarajan, Brian Price - 762 pages
-
- Separation of Concerns - Software Architecture, Functions, and Variadic Templates
-
- The C++ Standard Library by Rainer Grimm - 344 pages
- Effective Modern C++ by Scott Meyers - 336 pages
- C++ Core Guidelines Explained: Best Practices for Modern C++ by Rainer Grimm - 528 pages
- Practical C++ Programming by Steve Oualline - 600 pages
-
The Modern C++ Challenge. Become an expert programmer by solving real-world problems by Marius Bancila - 328 pages
- collection of 100 real-world problems
-
Professional C++ by Marc Gregoire - 1312 pages
- Part VI: Appendices
- Appendix A: C++ Interviews
- Part VI: Appendices
-
C++ Windows Programming by Stefan Björnander - 588 pages
- the Tetris game, a drawing program, a word processor, and a spreadsheet program
- how to develop object-oriented graphical applications
- how the Win32 API works, the second part of this book gives a detailed description
-
C++ Software Interoperability for Windows Programmers. Connecting to C#, R, and Python Clients by Adam Gladstone - 225 pages
- software interoperability deals with how software components written in one language may be connected to other components written in other languages
- connect a C++ codebase (our starting point) to client software written in three different languages: C#, R, and Python
- Building Low Latency Applications with C++ by Sourav Ghosh - 506 pages
- C++ Cookbook by D. Ryan Stephens, Christopher Diggins, Jonathan Turkanis, Jeff Cogswell - 594 pages
- Embracing Modern C++ Safely by John Lakos, Vittorio Romeo, Rostislav Khlebnikov, Alisdair Meredith - 1376 pages
- Hands-On Design Patterns with C++ by Fedor G. Pikus - 512 pages
- "С++17 STL. Стандартная библиотека шаблонов" (Я.Галовиц)
- C++17 Standard Library Quick Reference. A Pocket Guide to Data Structures, Algorithms, and Functions by Peter Van Weert, Marc Gregoire
- C++ High Performance. Boost and optimize the performance of your C++17 code by Viktor Sehr
-
C++17 By Example. Practical projects to get you up and running with C++17 by Stefan Björnander - 442 pages
- Chapter 9: Domain-Specific Language
- Chapter 10: Advanced Domain-Specific Language
- C++20 by Rainer Grimm - 600 pages
- C++20 Recipes. A Problem-Solution Approach by J. Burton Browning, Bruce Sutherland - 630 pages
- Clean C++20. Sustainable Software Development Patterns and Best Practices by Stephan Roth - 491 pages
- Design Patterns in Modern C++20. Reusable Approaches for Object-Oriented Software Design by Dmitri Nesteruk - 386 pages
- Modern C++ Programming Cookbook. Master C++ core language and standard library features, with over 100 recipes, updated to C++20 by Marius Bancila - 750 pages
- C++20 STL Cookbook by Bill Weinman - 450 pages
- C++20 Quick Syntax Reference: A Pocket Guide to the Language, APIs, and Library by Mikael Olsson - 205 pages
- C++ Data Structures and Algorithm Design Principles by John Carey, Shreyans Doshi, Payas Rajan - 626 pages
- Problems Solving in Data Structures & Algorithms using C++ by Hemant Jain - 588 pages
- Data Structures and Algorithms in C++ by Adam Drozdek - 784 pages
- CS 225 Introduction to Data Structures and Algorithms with C++
- Concurrency with Modern C++. What every professional C++ programmer should know about concurrency. by Rainer Grimm - 728 pages
- C++. Практика многопоточного программирования by Уильямс Э. - 640 страниц
- Mastering C++ Multithreading. Write robust, concurrent, and parallel applications by Maya Posch - 244 pages
- Modern Parallel Programming with C++ and Assembly Language. X86 SIMD Development Using AVX, AVX2, and AVX-512 by Daniel Kusswurm - 633
- Data Parallel C++. Mastering DPC++ for Programming of Heterogeneous Systems using C++ and SYCL by James Reinders, Ben Ashbaugh, James Brodman, Michael Kinsner, John Pennycook, Xinmin Tian - 548 pages
- Wikipedia
- Expression templates are a C++ template metaprogramming technique that builds structures representing a computation at compile time, where expressions are evaluated only as needed to produce efficient code for the entire computation.
- Boost.MPL is a general-purpose, high-level C++ template metaprogramming framework of compile-time algorithms, sequences and metafunctions.
- Шаблоны C++. Справочник разработчика by Вандевурд, Дэвид, Джосаттис, Николаи М., Грегор, Дуглас. - 848 страниц
- Template Metaprogramming with C++. Learn everything about C++ templates and unlock the power of template metaprogramming by Marius Bancila - 480 pages
- Test primality in C++: based on naive set theory, and it uses the C++ template mechanism
- Dr Dobb's / A Simple and Efficient FFT Implementation in C++
- Turing
- C++ template programming: Embedding the lambda-calculus to show Turing-completeness by Matt Might
- It is provably impossible to write a correct C++ parser which will complete compilation with either success or failure because the C++ template system is Turing complete. This means that code generation is based on a turing complete program. Code generation in C++ isn't based on a program description, but an actual turing complete program. As such, it is subject to the halting problem. Therefore, it is unknowable whether a compilation will complete, and unknowable if you are looking at a valid C++ program.
- Stack Overflow
- How to actually build a Turing Machine with templates and constant expressions
- Optimized C++ by Kurt Guntheroth - 388 pages
- The Art of Writing Efficient Programs. An advanced programmer's guide to efficient hardware utilization and compiler optimizations using C++ examples by Fedor G. Pikus - 464 pages
- C++ High Performance. Master the art of optimizing the functioning of your C++ code by Björn Andrist, Viktor Sehr - 540 pages
- Hackaday / C++ Design Patterns For Low-Latency Applications
- C++ для высокочастотного трейдинга: простые шаги к оптимизации кода
- KDAB
- efinancialcareers.com
- YouTube / CppCon 2024 / When Nanoseconds Matter: Ultrafast Trading Systems in C++ by David Gross
-
Embedded Programming with Modern C++ Cookbook by Igor Viarheichyk - 412 pages
- 6 Memory Management
- 13 Guidelines for Real-Time Systems
- 14 Guidelines for Safety-Critical Systems
- Microsoft Learn / Linux development with C++
- Hands-On System Programming with C++. Build performant and concurrent Unix and Linux systems with C++17 by Dr. Rian Quinn - 552 pages
- C++ Programming for Linux Systems by Desislav Andreev , Stanimir Lukanov - 288 pages
- Udemy / Linux System Programming using C and C++ (Practical Approach)
-
Oat++ An Open Source C++ Web Framework
- oatpp/oatpp Light and powerful C++ web framework for highly scalable and resource-efficient web application. It's zero-dependency and easy-portable.
- Overview
- TreeFrog Framework High-speed C++ MVC Framework for Web Application
- Introduction to the fundamentals of computer systems programming
- ИНТУИТ
- HEP Software Foundation Training Material
- Stepik
- OTUS
-
University of Waterloo
-
Department of Electrical and Computer Engineering
- ECE 050 Introduction to Programming This is a course designed to teach a new student how to program in C++. It does not assume any prior knowledge of programming.
-
Department of Electrical and Computer Engineering
- Software Design Using C++ by Br. David Carlson with contributions by Br. Isidore Minerd
- Microsoft Developer Blogs
- Fluent C++ - Jonathan Boccara's blog
- Dave Abrahams
- The Old New Thing by Raymond Chen
-
CppCon
-
YouTube
- Search
- Back To Basics
- CppCon 2021 - Klaus Iglberger - Back to Basics: Designing Classes
- Codelivly / Chronological list of resources to learn C++ from complete beginner to advanced level
- https://vk.com/c_plus_plus_programming_language
- MaskRay/ccls C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting
- C++ Team Blog / GitHub Copilot Extensions for C++ developers and beyond now available in VS Code
- KDAB / Improving C++ Development in Visual Studio Code
- Makefile Tutorial By Example
- Red Hat Developer / 2 tips to make your C++ projects compile 3 times faster
- PSPDFKit
- Fast distributed compilation and testing of large C++ projects by Rosen Matev (CERN)
- Distributed C/C++ Compilation service by Ian Richard BAKER
- CppDepend / The Importance of C++ Distributed Build Systems
- YouTube / cpponsea / The Hitchhiker's Guide to Faster Builds by Viktor Kirilov
- YouTube / SwedenCpp / Compiling C++ is slow - let's go faster by Tobias Hieta
- Bits'n'Bites / Faster C++ builds
- FASTBuild High performance build system for Windows, OSX and Linux. Supporting caching, network distribution and more.
- MSYS2 It consists of a command line terminal called mintty, bash, version control systems like git and subversion, tools like tar and awk and even build systems like autotools, all based on a modified version of Cygwin. MSYS2 provides up-to-date native builds for GCC, mingw-w64, CPython, CMake, Meson, OpenSSL, FFmpeg, Rust, Ruby, just to name a few.
- Ccache Compiler cache
- mozilla/sccache sccache is ccache with cloud storage
- distcc a fast, free distributed C/C++ compiler
- yrnkrn/zapcc is a caching C++ compiler based on clang, designed to perform faster compilations
- Figma Blog / Speeding Up C++ Build Times
- Unreal Engine Documentation / Include What You Use (IWYU) for Unreal Engine Programming
- include-what-you-use - A tool for use with clang to analyze #includes in C and C++ source files
-
Documentation
- Reference Documentation
- Training Materials
- More Modern CMake
- CMake Cookbook by By Radovan Bast, Roberto Di Remigio
- Modern CMake for C++. Discover a better approach to building, testing, and packaging your software by Rafał Świdziński - 460 pages
- CMake Best Practices. Discover proven techniques for creating and maintaining programming projects with CMake by Dominik Berner, Mustafa Kemal Gilor - 406 pages
- UNITY_BUILD the target source files will be combined into batches for faster compilation
- mold
- gchatelet/gcc_cpp_mangling_documentation Reverse engineering of Linux/OSX gcc C++ name mangling
- Wikiversity / Visual C++ name mangling
- Stack Overflow
- Cling: The cling C++ interpreter
-
ROOT: analyzing petabytes of data, scientifically. An open-source data analysis framework used by high energy physics and others.
- Cling is an interactive C++ interpreter, built on the top of LLVM and Clang libraries.
- GitHub
-
ROOT: analyzing petabytes of data, scientifically. An open-source data analysis framework used by high energy physics and others.
- YouTube / The Cherno / Track MEMORY ALLOCATIONS the Easy Way in C++
- Consistent Chrome Memory Metrics
- Daniel Lemire (simdjson)
- KDE Applications / Heaptrack
- GitHub
- В отчете АНБ США говорится о том, что злоумышленники все чаще и чаще начинают использовать уязвимости, связанные с управлением памятью, так как что C и C++ не обеспечивают должный уровень безопасности при работе с ней. PDF
- Have you ever wondered why people bother writing custom allocators? by Scott Lembcke
- DoorDash Engineering Blog / Examining Problematic Memory in C/C++ Applications with BPF, perf, and Memcheck
- C++11 Memory Model
- Хабр / Разгоняем C++ с кастомными аллокаторами
- A practical guide to C++ serialization
- Software Engineering Stack Exchange
- Namespaces
-
CppDepend Blog / 7 Common reasons of using the namespaces in a C++ project
- A common idiom in modern C++, pioneered by the developers of the Boost libraries, is to separate symbols that form part of the implementation of your module (that is, don’t form part of the public API) but that have to be publicly available into a separate sub-namespace, by convention named detail. For example in the boost::math documentation, it’s specified that: Functions not intended for use by applications are in
boost::math::detail
.
- A common idiom in modern C++, pioneered by the developers of the Boost libraries, is to separate symbols that form part of the implementation of your module (that is, don’t form part of the public API) but that have to be publicly available into a separate sub-namespace, by convention named detail. For example in the boost::math documentation, it’s specified that: Functions not intended for use by applications are in
- reddit / cpp / Correct way to use namespace
detail
- C++ Forum / Is this a good convention for namespaces
- cboard.cprogramming.com / namespace and data hiding
-
CppDepend Blog / 7 Common reasons of using the namespaces in a C++ project
- Microsoft Developer Blogs
- YouTube
-
NDC Conferences - YouTube
-
Sean Parent / Better Code: Runtime Polymorphism
- The requirements of a polymorphic type, by definition, comes from its use, and there are no polymorphic types, only polymorphic use of similar types. Inheritance is the base class of evil.
-
Sean Parent / Better Code: Runtime Polymorphism
-
NDC Conferences - YouTube
- GoogleTest User’s Guide
- Modern C++ Programming with Test-Driven Development by Jeff Langr
- Test-Driven Development with C++: A simple guide to writing bug-free Agile code by Abdul Wahid Tanner (GitHub)
- KDAB / C/C++ Debugging Tools
- YouTube / Minimal Logging Framework in C++20 by Koen Poppe
- NERSC/timemory Modular C++ Toolkit for Performance Analysis and Logging. Profiling API and Tools for C, C++, CUDA, Fortran, and Python. The C++ template API is essentially a framework to creating tools: it is designed to provide a unifying interface for recording various performance measurements alongside data logging and interfaces to other tools.
-
ORBIT PROFILER
- google/orbit C/C++ Performance Profiler
- YouTube / Google for Developers / Performance profiling solutions on Stadia
- morganstanley/Xpedite A non-sampling profiler purpose built to measure and optimize performance of C++ low latency/real time systems
- KDAB / C/C++ Profiling Tools
-
Call Stack Logger – Function instrumentation as a way to trace program’s flow of execution by Tomasz Augustyn
- TomaszAugustyn/call-stack-logger Call Stack Logger uses function instrumentation to facilitate logging of every function call. Each nesting adds an ident, whereas returning from a function removes it. As the result call stack tree is produced at the runtime giving knowledge of the actual program's flow of execution.
- Хабр / Call Stack Logger — инструментирование функций как способ отслеживания потока выполнения программы
- opentracing/opentracing-cpp OpenTracing API for C++
- namhyung/uftrace Function graph tracer for C/C++/Rust/Python
- YouTube / CppCon 2016 / “uftrace: A function graph tracer for C/C++ userspace programs" by Honggyu Kim
- “Goodbye ! printf()” hands-on tutorials with uftrace: function graph tracer for C/C++ by Taeung Song 송태웅 , KOSSLAB
-
C++ Benchmarking
- ssciwr/cpp-benchmarking Performance benchmarking C++ applications
- Micro-benchmarking tools
-
Google benchmark
- Widely used and actively maintained
- See also Quick-bench (online version a bit like compiler explorer)
-
Celero
- Actively maintained
-
Nonius
- Older, less/not actively maintained
-
Catch2
- Some integration of nonius to add benchmarks to unit tests
- Do it yourself solution
- E.g. using std::chrono::high_resolution_clock
- Not recommended
-
Google benchmark
- Profiling Tools
- Perf
- No special instrumentation or re-compilation of code required
- Relatively simple to use, pre-installed on most linux distributions
- But linux only, and need sudo permissions:
- https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html
- Intel VTune
- Likwid
- Gperftools
- Orbit
- Tracy
- Optick
- and many more…
- Perf
- Perf visualization
- Raw assembly can be overwhelming
- Can be easier to interpret a call graph, flame graph, etc
- Options (all inconvenient in different ways)
-
https://github.com/KDAB/hotspot
- Works directly on perf.data, but output seems incomplete / wrong
-
https://github.com/brendangregg/FlameGraph
- Use supplied perl script to convert trace data first
-
https://github.com/google/pprof
- But also need https://github.com/google/perf_data_converter
-
https://www.eclipse.org/tracecompass
- But you need to re-compile perf with CTF support
-
https://github.com/KDAB/hotspot
- Recommended resources
- Benchmarking
- Chandler Carruth talks on benchmarking/performance
- Fedor Pikus talk on branchless programming
- Profiling
- Performance
- Mike Acton talk on data oriented design
- Ulrich Drepper paper on memory and cache
- What Every Programmer Should Know About Memory
- Not for “every programmer” but excellent info on RAM / cache / performance
- From 2007 but still very relevant
- A curated list of c++ performance-related resources
- Hash maps
- Malte Skarupke talk on hash map implementations and performance
- Matt Kulukundis talks on Google’s hash map
- Benchmarking
- C++ Reactive Programming. Design concurrent and asynchronous applications using the RxCpp library and Modern C++17 by Praseed Pai, Peter Abraham - 348 pages
- Software Development with C++: Maximizing Reuse with Object Technology by Kjell Nielsen - 474 pages
- LibHunt / C++ ORM libraries
- fnc12/sqlite_orm SQLite ORM light header only library for modern C++
- paulftw/hiberlite C++ ORM for SQLite
- BrainlessLabs/bun Bun is a simple to use C++ Object Database, Object Relational Mapper (ORM) and key-value library
- TinyORM is a modern c++ ORM library that makes interacting with a database extremely simple.
- edwig/CXHibernate C++ Hibernate ORM Framework
- ODB
- ocornut/imgui: Dear ImGui Bloat-free Graphical User interface for C++ with minimal dependencies
- rbock/sqlpp11 A type safe SQL template library for C++
- SRombauts/SQLiteCpp SQLiteC++ (SQLiteCpp) is a smart and easy to use C++ SQLite3 wrapper.
- GitHub
- Rule of three (C++ programming)
- C++ Standard Library
- Шаблон:Интегрированные среды разработки для C и C++
- Category:Free software programmed in C++
- Cppcheck is a static code analysis tool for the C and C++ programming languages.
- Хабр / «Есть вопросы, на которые не ответит даже наниматель»: три истории о собеседованиях разработчиков на С++
- Udemy / Cracking the C++ Coding Interview
- Programming Problems. A Primer for The Technical Interview. Volume I: Fundamentals in C++11 by Bradley Green - 155 pages
-
Antonio Gulli (Eng Director for the Office of the CTO)
- A Collection of Design Pattern Interview Questions Solved in C++
- A Collection of Dynamic Programming Interview Questions Solved in C++
- A Collection of Bit Programming Interview Questions solved in C++
- A Collection of Graph Programming Interview Questions Solved in C++ (Volume 2)
- A collection of Tree Programming Interview Questions Solved in C++ (Volume 5)
- Special Edition Programming Interview Questions Solved in C++: Tree, Graph, Bit, Dynamic Programming, and Design Patterns (Special Collections on Programming)
- Logicmojo
- Старые вопросы на экзамен по C++
- GeeksforGeeks
- Tutorials Point
- JavaTpoint
- Toptal
- Software Testing Help
- InterviewBit
- Simplilearn
- Interview Kickstart
-
Cracking the C++ Programming Skills: IT Job Interview Series by Shriram K. Vasudevan, Subashri Vasudevan, RMD Sundaram & Abhishek S Nagarajan - 242 pages
- C++ programming questions and answers
- Compiler Explorer
- Quick C++ Benchmarks
- C++ Insights
- Woboq Code Browser - Explore C++ code on the web
- YouTube / CppCon 2023 / std::linalg: Linear Algebra Coming to Standard C++ by Mark Hoemmen
- CppDepend.com / Even the White House wants you to abandon C and C++, It's time to focus on C++ safety and join the Bjarne initiative.
- dev.by / Создатель С++ ответил на критику американских властей
- Хабр / Ода хейта C++
- the-good-and-bad-of-cpp-as-a-rust-dev by Chad Nauseam
- Skillbox Media / «У меня началась вторая жизнь»: как Юрий прошёл обучение по C++ и нашёл работу в 66 лет
- C++ is notoriously hard to parse. Most people who try to do this properly end up taking apart a compiler.
move
follows a nice old C++ tradition. Just likemove
doesn't move,remove
doesn't remove anddelete
does not delete its argument :)- Name of C/C++ stdlib naming convention? It's called "Whatever shit we happened to come up with this week".
- What is
std::decay
and when it should be used? It's obviously used to decay radioactivestd::atomic
types into non-radioactive ones. std::advance
- "We're Not Retreating; We're Advancing in a Different Direction"