mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 02:05:57 +01:00
learn more c++, it never ends
This commit is contained in:
22
README.adoc
22
README.adoc
@@ -15496,7 +15496,7 @@ Programs under link:userland/cpp/[] are examples of https://en.wikipedia.org/wik
|
||||
* templates
|
||||
** link:userland/cpp/template.cpp[]: basic example
|
||||
** link:userland/cpp/template_class_with_static_member.cpp[]: https://stackoverflow.com/questions/3229883/static-member-initialization-in-a-class-template
|
||||
** link:userland/cpp/if_constexpr.cpp[]: C++17 `if constexpr`
|
||||
** link:userland/cpp/if_constexpr.cpp[]: C++17 `if constexpr`: https://stackoverflow.com/questions/12160765/if-else-at-compile-time-in-c/54647315#54647315
|
||||
* iostream
|
||||
** link:userland/cpp/copyfmt.cpp[]: `std::copyfmt` restores stream state, see also: https://stackoverflow.com/questions/12560291/set-back-default-floating-point-print-precision-in-c/53673686#53673686
|
||||
* fstream
|
||||
@@ -15509,6 +15509,26 @@ Programs under link:userland/cpp/[] are examples of https://en.wikipedia.org/wik
|
||||
*** <<algorithms>> contains a benchmark comparison of different c++ containers
|
||||
*** link:userland/cpp/set.cpp[]: `std::set` contains unique keys
|
||||
|
||||
[[cpp-initialization-types]]
|
||||
==== C++ initialization types
|
||||
|
||||
OMG this is hell, understand when primitive variables are initialized or not:
|
||||
|
||||
* https://stackoverflow.com/questions/3127454/how-do-c-class-members-get-initialized-if-i-dont-do-it-explicitly
|
||||
* https://blog.tartanllama.xyz/initialization-is-bonkers/
|
||||
|
||||
Intuition:
|
||||
|
||||
* direct initialization: a constructor called explicitly with at least one argument: https://en.cppreference.com/w/cpp/language/direct_initialization
|
||||
* default initialization: does not initialize primitive types: https://en.cppreference.com/w/cpp/language/default_initialization
|
||||
* value initialization: maybe initializes primitive types: https://en.cppreference.com/w/cpp/language/value_initialization
|
||||
* zero initialization: initializes primitive types
|
||||
|
||||
Good rule:
|
||||
|
||||
* initialize every single variable explicitly to prevent the risk of having uninitialized variables due to programmer error (which is easy to get wrong due to insane rules)
|
||||
* if you don't define your own default constructor, always `= delete` it instead. This prevents the possibility that variables will be assigned twice due to zero initialization
|
||||
|
||||
[[cpp-multithreading]]
|
||||
==== C++ multithreading
|
||||
|
||||
|
||||
Reference in New Issue
Block a user