User Tools

Site Tools


development:cpp

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

development:cpp [2025/10/30] – created hayatidevelopment:cpp [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
 +~~NOTRANS~~
 +{{indexmenu_n>200}}
 +
 +====== C++ ======
 +
 +There are many interesting C++ sites and blogs. There's no need to repeat / copy the contents.
 +
 +===== Sites, Blogs and Books =====
 +
 +  * hacking C++
 +    * https://hackingcpp.com/
 +  * C++ and other development and devop themes
 +    * https://www.bogotobogo.com/cplusplus/cpptut.php
 +  * Fluent C++
 +    * https://www.fluentcpp.com/
 +  * [[https://accu.org/|accu.org]]
 +    * [[https://accu.org/journals/nonmembers/overload_issue_members/|contents for non-members]]
 +  * [[https://abseil.io/|Abseil]]
 +    * https://abseil.io/tips/
 +    * https://abseil.io/blog/
 +  * Bartek (Bartlomiej Filipek)
 +    * https://www.cppstories.com/p/start-here/
 +    * https://www.amazon.de/Bartlomiej-Filipek/e/B08FKY9LKP
 +  * Rainer Grimm
 +    * https://www.grimm-jaud.de/
 +    * https://www.modernescpp.com/
 +    * https://www.amazon.de/Rainer-Grimm/e/B006ID8WYY
 +  * Bjarne Stroustrup
 +    * https://www.stroustrup.com/
 +    * https://www.amazon.de/Bjarne-Stroustrup/e/B000AQ349S
 +  * Andrei Alexandrescu
 +    * http://erdani.org/
 +    * https://www.amazon.de/Andrei-Alexandrescu/e/B001ILKI7K
 +  * Herb Sutter
 +    * https://herbsutter.com/
 +    * https://www.amazon.de/Herb-Sutter/e/B001ILHLCK
 +  * Nicolai Josuttis
 +    * http://www.josuttis.de/
 +    * https://www.amazon.de/Nicolai-M-Josuttis/e/B001ITYMY2
 +  * Scott Meyers
 +    * https://www.amazon.de/Scott-Meyers/e/B004BBEYYW/
 +  * John Lakos
 +    * https://www.youtube.com/results?search_query=John+Lakos+C%2B%2B
 +    * https://www.amazon.de/John-S-Lakos/e/B00J7WW226
 +  * Jonathan Müller
 +    * https://www.jonathanmueller.dev/
 +  * Eli Bendersky
 +    * https://eli.thegreenplace.net/
 +  * Ofek Shilon
 +    * https://ofekshilon.com/
 +  * Šimon Tóth
 +    * https://medium.com/@simontoth
 +    * A Complete Guide to Standard C++ Algorithms
 +      * https://leanpub.com/cpp-algorithms-guide
 +      * https://github.com/HappyCerberus/book-cpp-algorithms
 +
 +  * [[https://cppcast.com/|CppCast]]
 +
 +  * Reference
 +    * https://en.cppreference.com/w/
 +  * cheatsheet of modern C++ language and library features
 +    * https://github.com/AnthonyCalandra/modern-cpp-features
 +  * C++ Best Practices
 +    * https://github.com/cpp-best-practices/cppbestpractices/blob/master/00-Table_of_Contents.md
 +  * C++ Core Guidelines
 +    * http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
 +
 +===== Conferences & YouTube channels =====
 +
 +  * https://github.com/martinmoene/cpp_youtube_channels
 +  * https://hackingcpp.com/cpp/educational_videos.html
 +
 +===== Libraries =====
 +
 +  * Lists
 +    * https://en.cppreference.com/w/cpp/links/libs
 +    * https://project-awesome.org/fffaraz/awesome-cpp
 +    * https://cpp.libhunt.com/
 +    * https://github.com/nemequ/single_file_libs
 +  * Boost
 +    * https://www.boost.org/doc/libs/
 +  * https://abseil.io/
 +    * https://github.com/abseil/abseil-cpp
 +  * https://github.com/Microsoft/GSL
 +  * https://github.com/facebook/folly
 +  * static / small buffer optimized vectors
 +    * https://github.com/gharveymn/small_vector
 +    * https://github.com/gnzlbg/static_vector
 +    * https://github.com/cristi1990an/Static-Vector
 +  * Enums
 +    * https://github.com/quicknir/wise_enum
 +    * https://github.com/aantron/better-enums
 +  * Coroutines to Implement C++ Exceptions
 +    * https://github.com/eyalz800/zpp_throwing
 +    * https://docs.google.com/presentation/d/1h1V3z0v9ENwk4BJUMogIttKCgJ9MipmSn49MpKCbi9k/edit#slide=id.p
 +  * Martin Moene
 +    * https://github.com/gsl-lite/gsl-lite
 +    * https://github.com/martinmoene/span-lite
 +    * https://github.com/martinmoene/scope-lite
 +    * more @ https://github.com/martinmoene
 +  * Scope Exit
 +    * with LAMBDA and ''td::unique_ptr''
 +      * https://en.cppreference.com/w/cpp/memory/unique_ptr
 +      * ''#include <memory>''
 +      * ''auto lambda_to_call = [&](void*) { .. };''
 +      * ''std::unique_ptr<void, decltype(lambda_to_call)> rst((void*)1, lambda_to_call);''
 +    * https://github.com/SergiusTheBest/ScopeExit
 +    * https://github.com/martinmoene/scope-lite
 +  * (G)UI
 +    * http://nanapro.org/en-us/
 +      * https://github.com/cnjinhao/nana
 +      * http://nanapro.org/en-us/documentation/
 +      * http://nanapro.org/en-us/blog/
 +      * http://nanapro.org/en-us/forum/index.php?u=/topic/986/ggbug-when-using-nana-liabry-in-windows-dll/post-2156#post-2156
 +    * https://github.com/Immediate-Mode-UI/Nuklear
 +    * https://github.com/rxi/microui
 +    * https://github.com/andlabs/libui
 +  * (T)UI
 +    * https://pdcurses.org/
 +    * https://github.com/mirror/ncurses
 +    * https://github.com/ldm0/wncurses
 +    * https://github.com/unicurses/unicurses
 +
 +
 +===== Selected topics =====
 +
 +==== Out-of-memory handling strategies ====
 +
 +  * it's really hard to recover from out-of-memory situations
 +  * the program needs the possibility to free (or shrink) some memory resources
 +  * **all** memory allocations - **including** utilized libraries - have to be controlled
 +  * that's practically impossible for big applications depending on many external libraries
 +  * Linux and it's OOM-killer need special attention
 +  * related: the requirement for an exception-safe c++ program, so that resources are not leaked
 +  * for most applications, it's not worth that much efforts. thus, let the program terminate or crash (early)!
 +
 +some Links:
 +  * https://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c
 +  * https://kristerw.blogspot.com/2015/05/out-of-memory-handling.html
 +  * Linux' OOM-Killer:
 +    * https://backdrift.org/oom-killer-how-to-create-oom-exclusions-in-linux
 +    * [[https://gist.github.com/t27/ad5219a7cdb7bcb977deccbc48a480d5|Dealing with the Linux OOM Killer at the program level]]
 +    * [[https://www.percona.com/blog/2019/08/02/out-of-memory-killer-or-savior/|How to Adjust Linux Out-Of-Memory Killer Settings ..]]
 +    * https://unix.stackexchange.com/questions/432171/completely-disable-oom-killer
 +    * https://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work
 +    * https://www.lug-erding.de/blog/2020-05-15-linux-und-overcommit_memory.html
 +
 +
 +==== Templates and SFINAE enable_if ====
 +
 +  * "Substitution Failure Is Not An Error"
 +  * https://en.cppreference.com/w/cpp/types/enable_if
 +  * https://en.cppreference.com/w/cpp/language/sfinae
 +  * https://eli.thegreenplace.net/2014/sfinae-and-enable_if/
 +  * https://www.fluentcpp.com/2018/05/15/make-sfinae-pretty-1-what-value-sfinae-brings-to-code/
 +  * https://www.fluentcpp.com/2018/05/18/make-sfinae-pretty-2-hidden-beauty-sfinae/
 +
 +==== Dynamic Polymorphism vs Curiously Recurring Template Pattern (CRTP) ====
 +
 +CRTP: injecting/providing methods to a (template) base class through a template class parameter. This might be done to overcome performance penalties of dynamic polymorphism, e.g. to allow inlining.
 +
 +  * https://eli.thegreenplace.net/2011/05/17/the-curiously-recurring-template-pattern-in-c/
 +  * https://eli.thegreenplace.net/2013/12/05/the-cost-of-dynamic-virtual-calls-vs-static-crtp-dispatch-in-c
 +
 +==== Weak Symbols ====
 +
 +  * https://en.wikipedia.org/wiki/Weak_symbol
 +  * https://ofekshilon.com/2014/02/10/linker-weak-symbols/
 +  * https://stackoverflow.com/questions/13089166/how-to-make-gcc-link-strong-symbol-in-static-library-to-overwrite-weak-symbol
 +
 +==== RAII ====
 +
 +  * https://eli.thegreenplace.net/2016/c-raii-without-exceptions/
 +
 +===== Misc articles =====
 +
 +  * 50 terrible coding tips for a C++ developer
 +    * https://pvs-studio.com/en/blog/posts/cpp/0953/
 +  * The Day The Standard Library Died
 +    * https://cor3ntin.github.io/posts/abi/
 +
 +[[https://www.hyrumslaw.com/|Hyrum's Law]]:\\
 +<wrap indent>//With a sufficient number of users of an API,//</wrap>\\
 +<wrap indent>//it does not matter what you promise in the contract://</wrap>\\
 +<wrap indent>//all observable behaviors of your system//</wrap>\\
 +<wrap indent>//will be depended on by somebody.//</wrap>\\
 +
 +===== IDE =====
 +
 +==== Compiler & Standard support ====
 +
 +  * https://en.cppreference.com/w/cpp/compiler_support
 +  * https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance
 +  * predefined preprocessor definitions
 +    * https://sourceforge.net/p/predef/wiki/Home/
 +    * https://en.cppreference.com/w/cpp/preprocessor/replace#Predefined_macros
 +    * https://en.cppreference.com/w/cpp/feature_test
 +    * https://www.boost.org/doc/libs/release/libs/predef/
 +
 +
 +==== Compiler + IDE ====
 +
 +  * Qt Creator
 +    * Windows Offline Installer includes MinGW gcc
 +    * https://download.qt.io/
 +    * https://www.qt.io/offline-installers
 +  * JetBrains CLion
 +    * https://www.jetbrains.com/clion/
 +  * Microsoft Visual Studio
 +    * https://visualstudio.microsoft.com/downloads/
 +  * MinGW
 +    * https://wiki.qt.io/MinGW-64-bit
 +  * CodeLite
 +    * https://codelite.org/
 +  * embarcardero C++ Builder
 +    * https://www.embarcadero.com/de/products/cbuilder/starter
 +
 +
 +
 +
 +==== Profiler ====
 +
 +  * Intel VTune Profiler
 +    * https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html
 +  * Linux perf record
 +    * https://linux.die.net/man/1/perf-record
 +    * https://perf.wiki.kernel.org/index.php/Main_Page
 +  * https://optick.dev/
 +  * valgrind:
 +    * https://valgrind.org/docs/manual/manual.html
 +    * cachegrind
 +      * https://valgrind.org/docs/manual/cg-manual.html
 +    * callgrind
 +      * https://valgrind.org/docs/manual/cl-manual.html