Open Source im professionellen Einsatz

©dafouti, Photocase.com

Neue Funktionen in den GCC-Versionen 4.3 und 4.4

Mehr Mathe

Gegenwärtig entsteht der neue C++-Standard. Die GCC-Versionen 4.3 und 4.4 implementieren bereits einige Features davon. Sie lassen sich über die Option »-std=c++0x« aktivieren und sind vielfach schon so ausgereift, dass jedermann sie ohne Bedenken einsetzen kann.

Benutzer der Boost-Bibliotheken [1] kennen die meisten der neuen Features schon, denn ein guter Teil des neuen Standards gründet sich auf Boost. Die Einzelheiten finden sich im Draft des C++-Standards [2] und im Technischen Report zur Standardlibrary TR1 [3].

Neue Funktionen

Schon der C99-Standard vergrößerte die Anzahl der C++-Funktionen in »math.h« stark. Der neue Standard enthält in der Bibliothek »cmath« alle Funktionen aus C99 (Tabelle 1) und ergänzt noch viele weitere praktische Funktionen (Tabelle 2), weitere steuert die neue Standardbibliothek bei (Tabelle 3).

Außerdem schreibt er vor, dass die neuen C-Bibliotheken wie beispielsweise »stdint.h« oder »fenv.h« auch in C++ verfügbar sein müssen. Die C++-Namen lauten »cstdint«, »cfenv« und so weiter. Alle Definitionen sind im Namensbereich »std« verpackt.

Tabelle 1:
Mathematische Funktionen des alten C++

Hinzugenommen sind auch mehrere neue Container. Zunächst wären da die Hash-basierten Varianten der assoziativen Container »set«, »multiset« und »map« zu nennen. Eigentlich waren diese Container schon für den alten Standard geplant, die Entwickler ließen sie damals aber aus Zeitmangel aus.

Im neuen Standard gibt es die Bibliotheken »unordered_set« und »unordered_map«, die die Hash-basierten Container »unordered_set«, »unordered_multiset«, »unordered_map« und »unordered_multiset« definieren. Der Namensteil "unordered" deutet darauf hin, dass für die Benutzung dieser Container kein Vergleichsoperator nötig ist. Die Definition der Klasse »unordered_set« lautet:

template<class Value,
class Hash=hash<Value>,
class Pred=std::equal_to<Value>,
class Alloc=std::allocator<Value> >
class unorderd_set {
...
}

Tabelle 2: Neue
mathematische Funktionen in C++ (Auswahl)

Tabelle 3:
Zusätzliche mathematische Funktionen in TR1

Man kann also über die Template-Parameter den Allokator auswählen (wie bei allen Standardcontainern), das Vergleichsprädikat festlegen (standardmäßig kommt »==« zum Zug) und die Hashfunktion bestimmen. Wenn keine besonderen Informationen über die Daten vorliegen, fährt man mit den Standardeinstellungen sehr gut.

Der Vorteil der Hash-basierten Container gegenüber den Baum-basierten ist ihre größere Geschwindigkeit (siehe Tabelle 4). Ebenfalls neu sind die Klassen »array« (eine leichtgewichtige Klasse um ein C-Array) und die Klasse »forward_list« (eine einfach verkette Liste).

Tabelle 4:
Benchmarks

Intelligente Zeiger

Der C++-Standard kennt mit »auto_ptr« einen Pointer, der sein Objekt am Ende seiner Gültigkeit automatisch löscht. Die Klasse »auto_ptr« hat jedoch viele Einschränkungen. Jedes Objekt kann nur einen Besitzer haben und Kopier-Operationen führen zu sehr merkwürdigem Verhalten. Insbesondere darf der Programmierer »auto_ptr« nicht in Standardcontainern aufbewahren. Effektiv macht »auto_ptr« also mehr Probleme, als es löst. Der neue C++-Standard schafft »auto_ptr« zugunsten verbesserter intelligenter Zeiger ab. Die neuen sind:

  • »unique_ptr« ähnelt am meisten dem alten
    »auto_ptr«. Das Objekt gehört ausschließlich
    zu dem Zeiger. Mit »unique_ptr« lässt sich
    ausnahmesicher ein Zeiger innerhalb einer Funktion
    aufbewahren.
  • »shared_ptr« ist ein universell einsetzbarer
    intelligenter Zeiger. Mehrere »shared_ptr« können
    sich ein Objekt teilen. Löscht der Programmierer den letzten
    »shared_ptr«, der auf ein Objekt zeigt, ruft sein
    Dekonstruktor den Dekonstruktor des Objekts auf.
  • »weak_ptr« beobachtet Objekte, die
    »shared_ptr« verwaltet. Der »weak_ptr« hat
    keine Rechte an dem Objekt. Es ist also die Aufgabe des Anwenders
    sicherzustellen, dass das Objekt mindestens so lange existiert wie
    der Zeiger. Die beiden zuletzt genannten Zeiger stammen aus dem
    Boost-Projekt.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook