Seite wählen

Neuerungen in C++11

von | Sep 6, 2012 | Development

C++ ist eine der beliebtesten Programmiersprachen und wird vor allem für komplexe Software-Projekte verwendet, wenn Performance wichtig ist.
Um die Sprache einfacher verständlich und einsatzfähig zu machen, wurde 2011 vom zuständigen ISO-Gremium die neue Version C++11 veröffentlicht, an der bereits seit 2005 gearbeitet wurde.
Eine der meiner Meinung nach wichtigsten Änderungen ist dabei die Unterstützung von Type Inference. Dieses Feature ermöglicht es, Variablen zu deklarieren, ohne ihren genauen Typ angeben zu müssen. Der Compiler erkennt hierbei anhand von dem Initialisierungs-Ausdruck, welchen Typ eine Variabel hat. Dies macht z.B. die Verwendung von STL-Containern einfacher:
Mit C++98:
map::iterator it = m.begin();
Mit C++11:
auto it = m.begin();
Zusammen mit den neuen Range-based For-Loops wird dieses Feature noch mächtiger:
Vorher:

vector::iterator it;
for (it = v.begin(); it != v.end(); it++) {
  ...
}

Nachher:

for (auto i : v)
  ...
}

Die C++-Standard-Library bietet für viele Algorithmen eine Implementation an, z.B. zum Filtern oder Durchsuchen von Listen. Hierfür musste jedoch bisher eine Funktion als Callback übergeben werden, z.B.:

bool compare_numbers(int a, int b)
{
  if (a % 2 == 0 && b % 2 == 0)
    return a < b;
  else
  return (a % 2 == 0);
}
int main(int argc, char **argv)
{
  vector numbers = { 4, 3, 2, 7 };
  sort(numbers.begin(), numbers.end(), compare_numbers);
  for (int i : numbers)
    cout << i << endl;
  return 0;
}

C++11 bringt Unterstützung für Lambda-Ausdrücke, wie sie bereits aus anderen Sprachen wie z.B. Python bekannt sind:

int main(int argc, char **argv)
{
  vector numbers = { 4, 3, 2, 7 };
  sort(numbers.begin(), numbers.end(), [](int a, int b) {
    if (a % 2 == 0 && b % 2 == 0)
      return a < b;
    else
      return (a % 2 == 0);
  });
  for (int i : numbers)
    cout << i << endl;
  return 0;
}

Dies sind nur einige wenige Neuerungen, die den Programmierer-Alltag einfacher machen sollen. Das GNU-Projekt hat eine Liste aller Änderungen in C++11 und deren Implementations-Status in GCC: http://gcc.gnu.org/projects/cxx0x.html
Ein Problem von C++11 ist, dass die meisten Compiler noch nicht alle Features des neuen Standards unterstützen und man gerade bei Open Source-Projekten darauf achten muss, dass auch ältere Compiler-Versionen unterstützt werden. Vermutlich wird es daher noch einige Jahre dauern, bis C++11 allgemeintauglich ist.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Development

Mein PHP-Trainingsprojekt

PHP Schulung Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen...

check_prometheus ist jetzt öffentlich verfügbar!

Monitoring ist komplex, das wissen wir hier bei NETWAYS leider zu gut. Deswegen laufen in der Infrastruktur auch mal gerne mehrere Tools für die Überwachung. Zwei gern gesehene Kandidaten sind dabei Icinga und Prometheus. Icinga und Prometheus erfüllen...