Was sind die dunkleren Teile von C ++?

7

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?

    
alain.janinm 23.05.2009, 17:57
quelle

11 Antworten

2

Herb Sutters Bücher sind eine ausgezeichnete Quelle für dieses Thema - beginnen Sie mit Ссылка .

    
Alex Martelli 23.05.2009, 17:59
quelle
9

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.

    
Dan Olson 23.05.2009 19:05
quelle
5

Der Aphorismus für die Kandidaten-Features lautet: "Sie brauchen es nicht sehr oft, aber wenn Sie es brauchen, brauchen Sie es schlecht."

  • Platzierung neu
  • extern "C ++"
  • lokale Klassen
  • std :: Zuordner
  • veränderbar, explizit, flüchtig
  • pointer-to-any-Mitglied einer beliebigen Klasse

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.

    
Thomas L Holaday 23.05.2009 18:03
quelle
4

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.

    
FeatureCreep 23.05.2009 18:07
quelle
2

Sehr unklar:

  • void operator, ();
  • Vorrang des Operators || () und Operator & amp; & amp; () beim Kurzschließen von logische Ausdrücke
  • was passiert, wenn Sie überladen operator & amp; ()
  • Reihenfolge der Initialisierung von Stateful virtuelle Ehrlichkeit.
  • Zeiger auf die Vorlage verweisen Mitglieder
  • Funktion try Blöcke
  • die allocator :: Rebind-Syntax
  • Nicht standardmäßiges Verhalten von std :: unexpected
  • std :: cout.imbue ()
  • Alles mit Locales, besonders benutzerdefinierte Facetten
  • überschreiben über Dominanz
  • Trigraphen

Nur um ein paar zu nennen

    
Lance Diduck 21.12.2010 08:14
quelle
2

Einige obskure C ++ - Funktionen:

Helixirr 28.05.2013 11:46
quelle
1

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.

    
Dario 23.05.2009 18:10
quelle
1

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?

  • Destructor sollte keine Ausnahmen erhalten.
  • Einige der STL-Algorithmen verwenden Dinge wie swap, die auch keine Ausnahmen erlauben sollten, um in allen Situationen korrekt zu funktionieren.
  • usw. ...
Martin York 23.05.2009 18:33
quelle
1

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.

    
jcoffland 22.07.2011 00:27
quelle
0

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.

    
Martin York 23.05.2009 18:39
quelle
0

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.

    
Matej 23.05.2009 18:42
quelle

Tags und Links