{"id":20078076,"url":"https://github.com/BenjaminYde/CPP-Guide","last_synced_at":"2025-09-20T17:32:38.253Z","repository":{"id":193357664,"uuid":"688642083","full_name":"BenjaminYde/CPlusPlus-Guide","owner":"BenjaminYde","description":"Guide to become a proficient C++ programmer.","archived":false,"fork":false,"pushed_at":"2025-01-11T20:03:32.000Z","size":2490,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-11T21:22:25.134Z","etag":null,"topics":["cheatsheet","cmake","cplusplus","cpp","devcontainer","docs","documentation","examples","guide","learn","linux","modern","programming","reference","tutorial"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BenjaminYde.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-07T19:33:54.000Z","updated_at":"2025-01-11T20:03:35.000Z","dependencies_parsed_at":"2024-01-17T00:44:16.452Z","dependency_job_id":"63ebed30-124f-48fb-83a0-58027e7fc42d","html_url":"https://github.com/BenjaminYde/CPlusPlus-Guide","commit_stats":null,"previous_names":["benjaminyde/cpp-guide","benjaminyde/cplusplus-guide"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjaminYde%2FCPlusPlus-Guide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjaminYde%2FCPlusPlus-Guide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjaminYde%2FCPlusPlus-Guide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenjaminYde%2FCPlusPlus-Guide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BenjaminYde","download_url":"https://codeload.github.com/BenjaminYde/CPlusPlus-Guide/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233678695,"owners_count":18712984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cheatsheet","cmake","cplusplus","cpp","devcontainer","docs","documentation","examples","guide","learn","linux","modern","programming","reference","tutorial"],"created_at":"2024-11-13T15:12:44.626Z","updated_at":"2025-09-20T17:32:38.245Z","avatar_url":"https://github.com/BenjaminYde.png","language":"C++","readme":"# CPP Guide 📚\n\n### 👋 Welcome!\n\nThe CPP Guide repository is meant to be a **guide / quick reference** for C++ developers where I try to get to the point so you can spend more time programming. This guide is **Markdown**, so it is easily opened using **Visual Studio Code** or **Github**. It contains extensive documentation, code examples and best practices.\n\n### 📝 A Note on Reading This Guide\n\nBefore you dive in, it's important to understand that this guide is **structured by topic, not by difficulty**. There is **no prescribed \"beginner to advanced\" path**. Feel free to jump to any section that is relevant to your needs. A developer needing to understand `std::vector` can go straight there, while another might need to brush up on \"RAII\" or \"CMake Presets.\"\n\n### 🚀 Execute Code Examples \n\nExplore the `📁 examples` directory for **interactive C++** code examples, easily executable inside a **Docker DevContainer** within **Visual Studio Code**.  This setup ensures a consistent and streamlined coding environment, ideal for learning and experimentation.\n\n## 🗂️ Table of Contents \n\n\u003ctable width=\"100%\" style=\"border: none;\"\u003e\n\u003ctr valign=\"top\"\u003e\n\u003ctd width=\"33%\"\u003e\n\n📜 **Strings, Streams \u0026 Files**\n\n- Strings\n  - [std::string](./guide/strings/std_string.md)\n  - [C Style Strings](./guide/strings/c_style_strings.md)\n  - [String Literals](./guide/strings/string_literals.md)\n  - [Character Encoding](./guide/strings/character_encoding.md)\n  - [std::string_view](./guide/strings/string_view.md) (C++17)\n- Streams\n  - [IO Streams](./guide/strings/io_streams.md)\n  - [String Streams](./guide/strings/string_streams.md)\n  - [std::printf](./guide/strings/printf.md) (C++11)\n  - [std::format ](./guide/strings/std_format.md) (C++20)\n  - [std::print](./guide/strings/printf.md) (C++23)\n- Files\n  - [File IO](./guide/strings/file_io.md)\n  - [File Streams](./guide/strings/file_streams.md)\n\u003c/td\u003e\n\n\u003ctd width=\"33%\"\u003e\n\n📦 **Containers**\n\n- Sequence Containers\n  - [C-Style Arrays](./guide/containers/sequence/c_style_arrays.md)\n  - [Loops](./guide/containers/sequence/loops.md)\n  - [std::array](./guide/containers/sequence/std_array.md)\n  - [Dynamic Allocation](./guide/containers/sequence/dynamic_allocation.md)\n  - [Iterators](./guide/containers/sequence/iterators.md)\n  - [Standard Library Functions (STL)](./guide/containers/sequence/standard_library_functions.md)\n  - [std::list](./guide/containers/sequence/std_list.md)\n  - [std::deque](./guide/containers/sequence/std_deque.md)\n- Associative Containers\n  - [std::set](./guide/containers/associative/std_set.md)\n  - [std::map](./guide/containers/associative/std_map.md)\n  - [std::multiset](./guide/containers/associative/std_multiset.md)\n  - [std::multimap](./guide/containers/associative/std_multimap.md)\n- Unordered Associative Containers\n  - [std::unordered_set](./guide/containers/unordered_associative/std_unordered_set.md)\n  - [std::unordered_map](./guide/containers/unordered_associative/std_unordered_map.md)\n  - [std::unordered_multiset](./guide/containers/unordered_associative/std_unordered_multiset.md)\n  - [std::unordered_multimap](./guide/containers/unordered_associative/std_unordered_multimap.md)\n- Other Important Containers\n  - [std::span](./guide/containers/std_span.md) (C++20)\n  - [Container Adaptors](./guide/containers/container_adaptors.md)\n\u003c/td\u003e\n\n\u003ctd width=\"33%\"\u003e\n\n🧠 **Memory Management**\n\n- [References](./guide/memory/references.md)\n- [Pointers](./guide/memory/pointers.md)\n- [Smart Pointers](./guide/memory/smart_pointers.md)\n- [How To Use Smart Pointers With Functions](./guide/memory/smart_pointers_in_functions.md)\n- [Shallow Copy vs Deep Copy](./guide/memory/shallow_copy_vs_deep_copy.md)\n\n🎭 **Functions**\n\n- [Function Pointers](./guide/functions/function_pointers.md)\n- [Lambdas](./guide/functions/lambdas.md)\n- [std::function](./guide/functions/std_function.md)\n\u003c/td\u003e\n\n\u003c/tr\u003e\n\u003c/table\u003e\n\n🏛️ **Object Oriented Programming (OOP)**\n\n\u003ctable width=\"100%\" style=\"border: none;\"\u003e\n\u003ctr valign=\"top\"\u003e\n\u003ctd width=\"33%\" style=\"padding-bottom: 20px;\"\u003e\n\n**General**\n\n- [Classes vs Structs](./guide/oop/classes_vs_structs.md)\n- [Constructors](./guide/oop/constructors.md)\n- [Destructors](./guide/oop/destructors.md)\n- [Copy and Move Semantics](./guide/oop/copy_and_move.md)\n- [Default and Delete](./guide/oop/default_delete.md)\n- [Rule of Five](./guide/oop/rule_of_five.md)\n- [Rule of Zero](./guide/oop/rule_of_zero.md)\n- [Static](./guide/oop/static.md)\n- [Operator Overloading](./guide/oop/operator_overloading.md)\n- [Friend](./guide/oop/friend.md)\n- [Nesting Classes](./guide/oop/nesting_classes.md)\n- [Object Relationships](./guide/oop/object_relationships.md)\n\u003c/td\u003e\n\n\u003ctd width=\"33%\" style=\"padding-bottom: 20px;\"\u003e\n\n**Inheritance**\n\n- [Introduction](./guide/oop/inheritance/introduction.md)\n- [Order of Construction](./guide/oop/inheritance/order_of_construction.md)\n- [Access Specifiers](./guide/oop/inheritance/access_specifiers.md)\n- [Functions and Overriding Behavior](./guide/oop/inheritance/functions_and_overriding_behavior.md)\n- [Hiding Functionality](./guide/oop/inheritance/hiding_functionality.md)\n\u003c/td\u003e\n\n\u003ctd width=\"33%\" style=\"padding-bottom: 20px;\"\u003e\n\n**Virtual Functions**\n\n- [Introduction](./guide/oop/virtual_functions/introduction.md)\n- [Override and Final Specifier](./guide/oop/virtual_functions/override_and_final_specifier.md)\n- [Covariant Return Types](./guide/oop/virtual_functions/covariant_return_types.md)\n- [Destructors](./guide/oop/virtual_functions/destructors.md)\n- [Pure Virtual](./guide/oop/virtual_functions/pure_virtual.md)\n- [Multiple Inheritance](./guide/oop/virtual_functions/multiple_inheritance.md)\n- [Object Slicing](./guide/oop/virtual_functions/object_slicing.md)\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n🛠️ **C++ Compilation, CMake \u0026 Tooling**\n\u003ctable width=\"100%\" style=\"border: none;\"\u003e\n\u003ctr valign=\"top\"\u003e\n\u003ctd width=\"33%\" style=\"padding-bottom: 20px;\"\u003e\n\n**Compilation Process**\n- [Compilation Process](./guide/tools/compilation/compilation_process.md)\n- [Compiler Overview](./guide/tools/compilation/compilers.md)\n- [Build Generators](./guide/tools/compilation/build_generators.md)\n- [Dependency Management](./guide/tools/compilation/dependency_management.md)\n- [ABI (Application Binary Interface)](./guide/tools/compilation/abi.md)\n\u003c/td\u003e\n\n\u003ctd width=\"33%\" style=\"padding-bottom: 20px;\"\u003e\n\n**CMake**\n- [Introduction](./guide/tools/cmake/introduction.md)\n- [Generators](./guide/tools/cmake/generators.md)\n- [Variables](./guide/tools/cmake/variables.md)\n- [Targets](./guide/tools/cmake/targets.md)\n- [Presets](./guide/tools/cmake/cmakepresets.md)\n- Macros and Functions (todo)\n- [Best Practices](./guide/tools/cmake/best_practices.md)\n\u003c/td\u003e\n\n\u003ctd width=\"33%\" style=\"padding-bottom: 20px;\"\u003e\n\n**Tooling**\n- [Common Tools](./guide/tools/clang/tooling.md)\n- [H and CPP Files](./guide/oop/h_and_cpp_files.md)\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\n\u003ctable width=\"100%\" style=\"border: none;\"\u003e\n\u003ctr valign=\"top\"\u003e\n\u003ctd width=\"33%\"\u003e\n\n🔗 **Typing, Casting \u0026 ConstExpr**\n\n- [Auto](./guide/typing/auto.md)\n- Casting\n  - [implicit_casting](./guide/typing/casting/implicit_casting.md)\n  - [explicit_casting](./guide/typing/casting/explicit_casting.md)\n  - [static_cast](./guide/typing/casting/static_cast.md)\n  - [dynamic_cast](./guide/typing/casting/dynamic_cast.md)\n- [Using constexpr](./guide/typing/using_constexpr.md)\n- [Using constval](./guide/typing/using_constval.md)\n\u003c/td\u003e\n\n\u003ctd width=\"33%\"\u003e\n\n⚡ **Concurrency**\n\n- [Introduction](./guide/concurrency/introduction.md)\n- STL Threads\n  - [std::thread](./guide/concurrency/stl_threads/thread.md)\n  - [std::async and std::future](./guide/concurrency/stl_threads/async_and_future.md)\n- [POSIX vs STL Threads](./guide/concurrency/posix_vs_stl_threads.md)\n\u003c/td\u003e\n\u003ctd width=\"33%\"\u003e\n\n🎨 **Design Patterns \u0026 Idioms**\n\n- Idioms\n  - [RAII](./guide/design_patterns/raii.md)\n  - [PIMPL](./guide/design_patterns/pimpl.md)\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n🚧 **Todo**\n\n- Design patterns\n- Templates\n- Error handling\n\n## 📍 References\n\n\u003ctable width=\"100%\" style=\"border: none;\"\u003e\n\u003ctr valign=\"top\"\u003e\n\u003ctd width=\"50%\"\u003e\n\n### General\n\n- **CPP Reference**\n    - This is more of a reference but contains examples and explanations that can serve as a learning resource.\n    - [Link here](https://en.cppreference.com/w/)\n- **Online C++ Compiler**\n    - [Link here](https://www.tutorialspoint.com/compile_cpp_online.php)\n- **C++ Core Guidelines**\n  - [Link here](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)\n- **Google C++ Style Guide**\n  - [Link here](https://google.github.io/styleguide/cppguide.html)\n\n---\n\n### Tutorials\n\n- **LearnCpp**\n    - Devoted to teaching you how to program in C++. Whether you’ve had any prior programming experience or not, the tutorials on this site will walk you through all the steps to write, compile, and debug your C++ programs, all with plenty of examples.\n    - [Link here](https://www.learncpp.com/)\n- **GeeksforGeeks**\n    - Offers a variety of tutorials and exercises ranging from basic to advanced topics.\n    - [Link here](https://www.geeksforgeeks.org/c-plus-plus/?ref=shm_outind)\n\n---\n\n### Interviews\n\n- **C++ Interview Questions and Answers** (geeksforgeeks.org)\n  - [Link here](https://www.geeksforgeeks.org/cpp-interview-questions/)\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Books\n\n- **Software Architecture with C++** (Paid)\n  - Design modern systems using effective architecture concepts, design patterns, and techniques with C++20. By Adrian Ostrowski \u0026 Piotr Gaczkowski, April 2021.\n  - [Link here](https://www.packtpub.com/product/software-architecture-with-c/9781838554590)\n- **Professional C++** (Paid)\n  - Professional C++, 5th Edition raises the bar for advanced programming manuals. By Marc Gregoire, Feb 2021.\n  - [Link here](https://www.amazon.com.be/-/en/Marc-Gregoire/dp/1119695406)\n- **Modern CMake for C++** (Paid)\n  - Write comprehensive, professional-standard CMake projects. By Rafal Świdziński, May 2024.\n  - [Link here](https://www.packtpub.com/en-be/product/modern-cmake-for-c-9781805123361)\n- **CMake Best Practices** (Paid)\n  - Write comprehensive, professional-standard CMake projects. By Dominik Berner \u0026 Mustafa Kemal Gilor, Aug 2024.\n  - [Link here](https://www.packtpub.com/en-be/product/cmake-best-practices-9781835880654)\n- **Advanced C and C++ Compiling** (Paid)\n  - Understand the structure and purpose of the binary files produced by the compiler.\n  - [Link here](https://www.amazon.com/Advanced-C-Compiling-Milan-Stevanovic/dp/1430266678)\n- **Learning C++** (Free)\n  - Free unaffiliated eBook created from Stack Overflow contributors.\n  - [Link here](https://riptutorial.com/Download/cplusplus.pdf)\n- **More C++ Idioms** (Free)\n  - [Link here](https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms)\n- **C++ Programming: Code patterns design** (Free)\n  - [Link here](https://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns)\n- **C++ Notes for Professionals book** (Free)\n  - [Link here](https://goalkicker.com/CPlusPlusBook/)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBenjaminYde%2FCPP-Guide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBenjaminYde%2FCPP-Guide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBenjaminYde%2FCPP-Guide/lists"}