~~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 '' * ''auto lambda_to_call = [&](void*) { .. };'' * ''std::unique_ptr 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]]:\\ //With a sufficient number of users of an API,//\\ //it does not matter what you promise in the contract://\\ //all observable behaviors of your system//\\ //will be depended on by somebody.//\\ ===== 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