cpp11-krone2021-11
Links zur Schulung am 3. und 4. November
Meine Telefonnummer bei Problemen mit der MS-Teams Telko
0151 1787 1397
Online-Version der Unterlagen:
- https://tbfe.de/wetrain/C/Cplusplus_11_krone_2021-11
- Benutzer: mbk
- Kennwort:: kro!C++
Live-Demos:
- https://godbolt.org/z/4nKba614E (Ausgabe von Werten und Typen)
- https://godbolt.org/z/fzMbPs3oq (`typeid(...)` vs. boost.type_index)
- https://godbolt.org/z/8va14G6cz (PT für Typen aus <cstdint>
- https://godbolt.org/z/rbjG48hsG (`decltype` demo)
- https://godbolt.org/z/1q6a7nMT3 (Vergleich: mehrere Typen gemeinsam ändern)
- https://godbolt.org/z/84h7vEaso (constexpr Funktionen C++11/C++14)
- https://godbolt.org/z/v3xf5MGr5 (Compilezeit-Berechnungen C++98)
- https://godbolt.org/z/75o6YE1o1 (Nenutzerdefinierte Literal-Suffixe)
- https://godbolt.org/z/PqTsz1Knx (copy vs. move / Rvalue Referenzen)
- https://godbolt.org/z/hGvEvEG4Y (C'tor inheritence / using Base::xyz)
Fortlaufende Aufgabe:
HINWEIS: Nicht nur in der abschließenden sondern in allen Versionen sollten die move/copy-Operationen NICHT `=default` sondern `=delete` sein, da aufgrund des enthaltenen Zeigers nicht einfach kopiert werden darf!
- Anfang Tag 1: https://onlinegdb.com/vGFAl8F2E
- Anfang Tag 2: https://onlinegdb.com/_1cSpqJNy
- 10:00 Tag 2: https://onlinegdb.com/lR6YRwYrb
- 11:00 Tag 2: https://onlinegdb.com/uxZCM3Sby
- Kursende: https://onlinegdb.com/XDbbw4v33
- Schauen Sie sich dann den Code in `my_static_vector.h` an.
(es handelt sich um eine momentan noch stark eingeschränkte Form des `std::vector`) - (die Details der Definition des Makros `SHOW_` können Sie dabei zunächst ignorieren)
- Schauen Sie sich kurz den Code in `main.cpp` an.
- Schauen Sie sich dann den Code in `my_static_vector.h` an.
- Zustand am Ende des Tages: https://onlinegdb.com/wNd04S3qs
- Klicken Sie auf den Button RUN um den Code zu kompilieren und auszuführen.
- Klicken Sie auf den Button FORK, damit Sie Änderungen vornehmen können.
- Tragen Sie in `main.cpp` in den Zeilen 28 und 30 die richtigen "Erwartungswerte" ein
- Die zugehörigen Ausgaben nun mit einem Sternchen markiert sein.
- (nicht mehr mit einem Ausrufezeichen)
- Entfernen Sie in `main.cpp` Zeile 52 den Kommentar vor dem Aufruf von `max_size_test`.
- Klicken Sie eneut auf den Button RUN, um den Code zu kompilieren und auszuführen.
- Kontrollieren Sie die zusätzlichen erscheinenden Ausgaben.
- (sie sollten mit Sternchen beginnen, da die Erwartungswerte stimmen)
- Enfernen Sie in `main.cpp` Zeile 53 den Kommentar vor dem Aufruf von `push_pop_back_test`.
- Wenn Sie nun auf RUN klicken, werden zunächst KEINE zusätzlichen Ausgaben erscheinen von `push_pop_back_test` erscheinen.
- Ergänzen Sie in den drei mit "TBD"-markierten Zeilen dieser Funktion die entsprechenden Aufrufe von `SHOW_` (mit den richtigen Erwartungswerten).
- ZUSATZFRAGE: Prinzipiell gehört auch `my::static_vector::value_type` zur "öffentlichen Schnittstelle dieser Klasse. Wie könnte man hierfür einen passenden "Testfall" schreiben? (Eigentlich sollte es zu jedem Feature einer Klasse einen Test geben, im "extremen" TDD-Stil sollte dieser sogar der Implmentierung des Features vorausgehen.)
Diese Aufgabe wird im Lauf der beiden Schulungstage ausgebaut um die Features zu vervollständigen und den `my::static_vector` möglichst ähnlich zum `std::vector` zu machen. Wenden Sie dabei ggf. auch im schon vorhandenen Code von `my::static_vector` SOWEIT SINNVOLL die C++11 Features an, die in dieser Schulung behandelt werden:
- `constexpr` für Variablen und Funktionen
- `auto` für Variablen und Funktionen
- `decltype` zur Ermittlung des Typs von Ausdrücken und Variablen
- Initialisierung mit geschweiften Klammern
- Typ-Aliase mittels `using`
- direkte Member-Daten-Initialisierung
- vermeiden unerwünschter Konstruktoren mit `=delete`
- explizite Bereitstellung automatisch generierter Member-Funktionen mit `=default`
- `alignas`, `alignof`, `std::aligned_storage`
- Korrektheitsprüfungen zur Compilezeit mit `static_assert`
- Type Traits (`std::conditional`, `std::enable_if`, ...)
- ...
- (Liste wird gemäß Kursfortschritt ergänzt)