Kapitel 11. Removed und Deprecated

In diesem Kapitel:

Ein wichtiges Design-Ziel von C++11 ist es, abwärtskompatibel zu sein. So verwundert es nicht, das nur wenige Features aus dem alten C++-Standard entfernt bzw. auf deprecated gesetzt wurden.

Removed

auto

Durch auto int a= 5; wurde in C++98 die Variable a auf dem Stack angelegt. Das Schlüsselwort auto ist redundant, da das Anlegen einer Variablen auf dem Stack automatisch geschieht. Dies ist der Grund dafür, dass auto sehr selten verwendet wurde. In C++11 deklariert auto eine Variable, die ihren Typ durch Typableitung automatisch erhält:

auto a=5;

export

Das Schlüsselwort export wurde aus C++11 entfernt. Die Idee von export war es, dass nur die Deklaration und nicht die Definition eines Templates an der Stelle ihrer Anwendung bekannt sein muss. Sieht man von dem Comeau-Compiler (Comeau.Computing, 2008) ab, hat dieses Feature kein Compiler-Hersteller umgesetzt. Da ist es sehr pragmatisch, es wieder aus dem neuen Standard zu entfernen.

Deprecated

register

Mit dem Schlüsselwort register ließ sich in C++98 spezifizieren, dass die Variable a in der Anweisung register int a; in einem Prozessorregister angelegt werden soll. Dies war nur eine Empfehlung an den Prozessor, um häufige Zugriffe auf die Variable möglichst schnell auszuführen.

Ausnahmespezifikation

Ausnahmespezifikationen sind in C++11 auch deprecated. Die Ausnahmespezifikation einer Funktion gibt an, welche Ausnahmen die Funktion auslösen kann. Worin die Probleme von Ausnahmespezifikationen bestehen und warum sie in C++ nicht verwendet werden sollen, lässt sich schön in Herb Sutters Artikel »A Pragmatic Look at Exception Specifications« (Sutter, 2002) nachlesen.

auto_ptr, bind1st und bind2nd

Der Vollständigkeit halber seien hier noch std::auto_ptr sowie std::bind1st und std::bind2nd erwähnt, die ebenfalls mit C++11 deprecated sind. Während der Smart Pointer std::auto_ptr durch std::unique_ptr ersetzt wird, bietet std::bind, indem er eine Funktion und ihre Argumente bindet, die Funktionalität von std::bind1std und std::bind2nd deutlich komfortabler an. Insbesondere std::unique_ptr und std::bind werden in Teil IV, noch ausführlich erläutert.