|
Thema |
Forum |
Letzter Beitrag |
Beiträge |
Zugriffe |
 |
[Tutorial] [C++ von { bis }] 43 - Falsch gefangen
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Beim letzten Mal hatte ich behauptet, dass Referenzen in der Capture List einer lambda-Funktion gefährlich sein können. Den Beweis möchte ich diesmal antreten, indem ich das schlimmste produziere, was ein C++-Programm enthalten kann: undefined behaviour. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
246 |
 |
[Tutorial] [C++ von { bis }] 41 - std::function
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
881 |
 |
[Tutorial] [C++ von { bis }] 40 - lambda-Funktionen
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
234 |
 |
[Tutorial] [C++ von { bis }] 39 - Funktionsobjekte
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Objekte, die als Funktionen aufgerufen werden können? Wozu soll denn das gut sein? Nun, C++ bietet von Haus aus nicht wirklich flexible Möglichkeiten, Funktionen als Parameter zu übergeben. Die Standardbibliothek braucht aber hin und wieder mal Informationen von außen, die sich am besten per Funktionsaufruf abholen lassen. Praktisch, dass man mit Funktionsobjekten eine Lösung dafür hat. Das Beispiel zeigt den Einsatz bei std::sort. In den Algorithmen der Standardbibliothek gibt es aber noch eine Menge mehr. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
199 |
 |
[Tutorial] [C++ von { bis }] 38 - Ein Iterator zur Außenwelt
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Wenn die Standardbibliothek mal nicht den passenden Iterator für unsere Anwendungszwecke bereithält, dann implementieren wir uns eben unseren eigenen. Im Beispiel sollen die über einen passenden OutputIterator geschriebenen Werte in einer grafischen Oberfläche landen. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
226 |
 |
[Tutorial] [C++ von { bis }] 37 - Lass andere arbeiten
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Code, den man wiederverwenden kann, muss man nicht selbst (oder nochmal) schreiben. In dem Sinne bietet die Standardbibliothek durchaus einiges, was man immer mal wieder braucht. Heute schauen wir uns an, wie wir std::copy zur Ausgabe von Datenstrukturen wie Listen und Arrays verwenden können. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
208 |
 |
[Tutorial] [C++ von { bis }] 36 - Von Containern
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Ein -- leider etwas chaotischer -- Einstieg in die Standardbibliothek, der nochmal demonstriert, was das Konzept der Iteratoren alles an Möglichkeiten bietet. Auf zwei so verschiedenen Datenstrukturen, wie einem std::vector und einer std::list kann mittels Iteratoren der selbe Algorithmus angewandt werden. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
209 |
 |
[Tutorial] [C++ von { bis }] 35 - Iteratoren
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Ein flexibles, aber etwas theoretisches Konzept: Iteratoren. Als Verallgemeinerung der Pointer können sie nicht nur an Speicheradressen gebunden sein, sondern das Konzept "ich zeige auf einen Wert" beliebig implementieren. Weil's erstmal nur ein theoretischer Einstieg ist, gibt es heute keinen Code, sondern nur Erklärungen, was der Standard von Iteratoren so fordert und welche verschiedenen es gibt. --- Begleittext (diesmal allerdings eher knapp): Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
847 |
 |
[Tutorial] [C++ von { bis }] 34 - Teilweise ziemlich speziell
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Templates in C++ müssen nicht immer für alle Möglichkeiten spezialisiert werden. Im Gegenteil: man kann die Tatsache, dass man bestimmte Spezialisierungen weglässt, ausnutzen, um den Compiler absichtlich in einen Fehler zu treiben. Das nutzen wir, um bei unserem RangeInt Zuweisungen auf prinzipielle Machbarkeit zu prüfen. Kann der Compiler nachweisen, dass eine Zuweisung nie klappen kann, dann schlägt die Übersetzung fehl. Ansonsten geht's ganz normal weiter. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
209 |
 |
[Tutorial] [C++ von { bis }] 33 - Neue Typen generieren
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Unser RangeInt vom letzten Mal ist so noch wenig nützlich. Man kann ihn belegen, kopieren und zuweisen, aber nicht mit ihm rechnen. Diesmal soll gezeigt werden, wie man C++-Templates dafür nutzen kann, bei der Implementierung von Rechenoperationen schon zu prüfen, ob die Grenzen der beteiligten Typen eingehalten werden. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
251 |
 |
[Tutorial] [C++ von { bis }] 32 - Template Metaprogramming
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Einer der Punkte, an dem man sich immer wieder das Hirn verknotet: mit Templates kann man programmieren. Die entsprechenden Programme werden allerdings nicht zur Laufzeit ausgeführt, sondern während des Übersetzens des Programms. Quasi eine Meta-Sprache, mit der man das Verhalten des Compilers ändern kann. Wir benutzen das hier, um unser beim letzten Mal eingeführtes RangeInt zu verbessern: statt strikter Inkompatibilität wird es jetzt nur noch kritisch, wenn wir tatsächlich inkompatible Bereiche haben. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
247 |
 |
[Tutorial] [C++ von { bis }] 31 - Value Templates
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Templates können noch mehr, als nur Typen als Parameter annehmen: ein Templateparameter kann auch einen Typ haben und einen Wert dieses Typs als Parameterwert übernehmen. Das kann man (wie in unserem Beispiel) dafür ausnutzen, abhängig von bestimmten Konstanten (hier: Bereichsgrenzen) unterschiedliche Typen zu instanziieren. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
254 |
 |
[Tutorial] [C++ von { bis }] 30 - Templatespezialisierung
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Wenn's mal wieder was spezielles sein soll: ist ein Template zu allgemein, kann man es für bestimmte Parametertypen spezialisieren. Man gibt für den entsprechenden Typen eine eigene Variante an, die der Compiler dann verwendet, statt dass allgemeine Template zu instanziieren.
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
251 |
 |
[Tutorial] [C++ von { bis }] 29 Funktionstemplates
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Der Trick mit den Templates funktioniert auch mit Funktionen. Die bieten dann noch eine kleine Nettigkeit nebenbei: sie können bestimmte ihrer Templateparameter automatisch ableiten. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
214 |
 |
[Tutorial] [C++ von { bis }] 27 - Schwache Zeiger
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects std::shared_ptr und kreisförmige Objektbeziehungen vertragen sich so gar nicht. Da man aber derartige Entwürfe durchaus mal braucht, gibt es std::weak_ptr: ein Objekt, welches immer an einen shared_ptr gebunden ist, aber selbst nicht für den Referenzzähler zählt und somit das Löschen des Objektes nicht verhindert. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
290 |
 |
[Tutorial] [C++ von { bis }] 28 - Schlaue Zeiger (behind the scenes)
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Nachdem die letzten beiden Videos verschiedene Smart Pointer von C++11 beleuchtet haben, geht es diesmal darum, wie sowas eigentlich unter der Haube aussehen könnte. Nebenbei erkläre ich noch, wie man ein Objekt dazu bringt, sich wie ein Pointer zu verhalten. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
208 |
 |
[Tutorial] [C++ von { bis }] 26 - Schlaue Zeiger
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Ich mag keine nackten Zeiger. Die sind mir nicht intelligent genug. Glücklicherweise bietet C++11 mit std::shared_ptr (oder wahlweise die TR1 mit std::tr1::shared_ptr) da einen Ausweg: Objekte, die man wie Pointer verwenden kann, die sich aber selbst darum kümmern, aufzuräumen, wenn der letzte Pointer auf ein Objekt gelöscht wird. --- Begleittext: Um Links zu sehen, musst du dich registrierenBoost-Bibliothek (für shared_ptr auf älteren Compilern): Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
234 |
 |
[Tutorial] [C++ von { bis }] 23 - Namensräume
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Heute mal zwei Videos, weil es letzte Woche keins gab. Das Thema sind Namespaces. Eigentlich auf den ersten Blick ein simples Thema: man hat Präfixe vor Namen um diese eindeutig zu machen. Auf den zweiten Blick ist es dann doch etwas umfangreicher. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
239 |
 |
[Tutorial] [C++ von { bis }] 23b - Namensräume
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
318 |
 |
[Tutorial] [C++ von { bis }] 22 - Automatisch umgewandelt
Erstellt am: Sa 12. Jul 2014, 19:11
KN4CK3R
Vorschau
Go To Post
Zitat von Bytes'n'Objects Damit sich ein eigener Datentyp so richtig nach "C++" anfühlt, bauen wir in unser Optional-Template diesmal ein paar Funktionen zur Umwandlung in den Basistyp um. Wir möchten gern an Stellen, wo der Basistyp verwendet wird, einfach auch ein entsprechendes Optional angeben können. Umgekehrt genauso: ein Optional soll auch durch den Basistyp gefüllt werden können. Das Video zeigt, wie's geht und was Operatorüberladung und Konvertierungsfunktionen damit zu tun haben. --- Begleittext: Um Links zu sehen, musst du dich registrieren
|
C++ Tutorial |
Sa 12. Jul 2014, 19:11
von KN4CK3R
|
0 |
249 |