Ich habe einige Anfängerbücher zu C ++ gelesen und ein wenig darüber hinaus, aber was sind einige der eher obskuren Aspekte von C ++, oder wo kann ich Informationen / Tutorials zu diesen finden?
Herb Sutters Bücher sind eine ausgezeichnete Quelle für dieses Thema - beginnen Sie mit Ссылка .
ADL (aka Koenig Lookup) ist ziemlich unklar, obwohl die Leute es benutzen, ohne es in jedem Hello World Programm zu bemerken .
Der " ScopeGuard -Trick", wobei const-Referenzen als Rückgabewerte von Funktionen an den Umfang von etwas gebunden sind zugewiesen, ist auch ziemlich unklar. Dieser Artikel hat jedoch eine ganze Menge darauf aufmerksam gemacht.
Es gibt auch einige Eigenschaften und Verwendungen von sizeof (), die als obskur gelten, besonders wenn sie in Makros oder Vorlagenmetaprogrammen verwendet werden.
Der Aphorismus für die Kandidaten-Features lautet: "Sie brauchen es nicht sehr oft, aber wenn Sie es brauchen, brauchen Sie es schlecht."
Also, für die Leute, die Grund hatten, diese Features zu benutzen (Bibliotheksautoren), werden sie nicht obskur sein und für die Mehrheit der C ++ - Programmierer werden sie unbekannt sein.
Es kümmert sich eigentlich um bad_alloc.
nein?
Edit: Was ich meine ist, dass in vielen der manchmal riesigen C ++ - Projekte, in denen ich das Vergnügen hatte, Bugs zu beheben, das Konzept, bad_alloc zu fangen und danach zu handeln, gefehlt hat. Das würde es in den "obskuren" Teil von C ++ bringen, obwohl es nicht sein sollte.
Sehr unklar:
Nur um ein paar zu nennen
Einige obskure C ++ - Funktionen:
Template-Metaprogrammierung (eine komplette Programmiersprache, die in C ++ von der Compiler) und Hacks mit dem Präprozessor kann sehr hart sein! (Sie können damit sogar eine völlig neue Syntax erstellen. Schauen Sie sich einfach boost::lambda
Aber ich denke, die wichtigste Sache zu lernen und zu verstehen ist die STL (C ++ - Standardbibliothek), die unweigerlich nützlich ist, aber vielleicht etwas seltsam aussieht.
Alle Bücher erklären, was Ausnahmen sind.
Aber sehr wenige sprechen über Ausnahmesicherheit und die Ausnahme-Stipendiaten.
Wie man RAII (einfache Beispiel-Smart-Pointer) benutzt, um Ihre Code-Ausnahme sicher zu machen.
Was sind die Ausnahmen, die Sie bereitstellen sollten?
Niemand erwähnt, was ich denke, es ist einer der seltsamsten Teile von C ++, offensichtlich ein Nachgedanken, die Syntax für die Vor-Dekrementierung und Vor-Inkrement-Operatoren.
%Vor%gegen
%Vor%Natürlich bedeutet Post-Inkrementierung, dass Sie eins hinzufügen, aber den vorherigen Wert zurückgeben und Pre-Inkrement bedeutet, dass Sie eins hinzufügen und den neuen Wert zurückgeben. Zum Beispiel:
%Vor%Ich bin mir nicht sicher, was passiert, wenn Sie versuchen, das Argument 'int' zu verwenden oder zu übergeben. Du könntest versuchen, es so zu übergeben:
%Vor%Ich nehme an, dass Sie so zwischen den beiden Operatoren unterscheiden, wenn Sie sie explizit aufrufen.
Nicht so offensichtlich ist die Implementierung bestimmter Methoden in Bezug auf andere Methoden.
Zuweisungsoperator:
- & gt; implementieren als Kopie Konstruktion und Tausch.
operator +
- & gt; implementiert als Kopierkonstruktion und Operator + =
operator! =
- & gt; implementieren in Bezug auf Operator ==
usw. ...
Das Konzept ist, dass die Arbeit in einer Methode lokalisiert werden sollte und die anderen Methoden diese Methode verwenden, um die eigentliche Arbeit zu tun und dann ihre einzigartige Wendung hinzuzufügen.
Wenn Sie etwas Unklares über C ++ lernen möchten, versuchen Sie es mit Templates und lesen Sie Modernes C ++ Design von Andrei Alexandrescu . Dieses Buch ist Klassiker über Template-Metaprogrammierung.
Tags und Links c++