Vega - Grieshaber 2018-04 Übung Mittwochmittag
Die ersten beiden Abschnitte sind optional, da diese C++98 Stoff wiederholen.
Wenn Sie denken, `const` und `mutable` sicher zu beherrschen, können Sie auch unmittelbar mit der C++11 Thematik weiter unten beginnen …
(… und die optionalen Abschnitte evtl. nachholen, wenn später noch Zeit ist).
OPTIONAL Wiederholungen zum Thema `const` und `const_cast`
Schulungsunterlage Seite 14:
Demonstrieren (und erklären) Sie mit Hilfe des Coliru-Beispiels
(a) durch Entfernen des Kommentars in der Zeile mit `PX(++::v)` dass die GLOBALE Variable `v` unveränderbar ist (= Compile-Fehler);
(b) dass die über `const_cast` erzwungene Änderung an der LOKALEN Variablen `v` beim DIREKTEN Zugriff nicht sichtbar ist, wohl aber beim Zugriff über Zeiger;
(c) durch Auskommentieren der Zeile, in der die LOKALE Variable `v` vereinbart ist, dass das per `const_cast` erzwungene Inkrement der GLOBALEN Variablen `v` zum Programmabsturz führt.
Schulungsunterlage Seite 16:
Demonstrieren (und erklären) Sie mit Hilfe des Coliru-Beispiels
(a) dass `const` bei VERÄNDERNDEN Memberfunktionen (wie den "Settern" für `x` und `y` sowie `shift_x` und `shift_y`) einen Compile-Fehler auslöst;
(b) ebenso die Verwendung einer `const`-Referenz beim ersten Argument der globalen Funktion `shift_xy`.
OPTIONAL Wiederholung zum Thema `mutable` vs. `const_cast`
Schulungsunterlage Seite 17:
Demonstrieren Sie mit Hilfe des Coliru-Beispiels
(a) dass das ENTFERNEN von `mutable` bei `radius`, `angle` und `mod` zunächst zu einem Compile-Fehler IN der Funktion `sync_ra` führt
(b) der zwar dadurch beseitigt werden kann, dass man bei `sync_ra` den Zusatz `const` entfernt …
(c) … was nun aber zu einem Compile-Fehler an den AUFRUF-Stellen von `sync_ra` führt …
(d) … den man wiederum beseitigen kann, indem man `sync_ra` mit einem explizit vorangestellten `this->` aufruft, dem per `const_cast` das `const` weggenommen wurde.
Ab hier C++11 Thematik `constexpr`
Schulungsunterlage Seite 19:
(a) Kompilieren Sie das Coliru-Beispiel mit C++11 und C++14.
(b) Zeigen Sie, dass die Variable `x` auch `constexpr` sein kann.
(c) Verwenden Sie `auto` an weiteren Stellen, an denen das möglich ist, sowohl für Variablen, als auch für Funktionsergebnisse.
Schulungsunterlage Seite 21:
Demonstrieren (und erklären) Sie mit Hilfe des Coliru-Beispiels
(a) dass `circle_area` und `sphere_surface` nur dann `constexpr` sein können, wenn auch `PI` `constexpr` ist,
(b) dies aber NUR der Kompilierung mit `g++` möglich ist, NICHT aber mit `clang++` …
(c) … es sei denn, Sie initialisieren die Variable mit dem Literal 3.14159.
Zusatzfrage: wie groß ist der Unterschied zwischen dem Wert `3.14159` und dem genaueren Wert, den `2*std::acos(0.0)` liefert, wie groß ist der Unterschied zu `2*std::acos(0.0f)` sowie `2*std::acos(0.0L)` und warum unterscheiden sich diese Werte überhaupt?