C++: auto Schlüsselwort

Der neue C++ Standard wird viele Neuerungen mit sich bringen und bereits jetzt unterstützen einige Compiler die neuen Konzepte. Eines der kleineren Neuerungen ist das Schlüsselwort auto.
Es steht für einen unbekannten Datentyp, den der Compiler selbst bestimmt. Am einfachsten versteht man es anhand eines Beispiels.


	// verschiedene Variablen anlegen
	auto var1 = 4;
	auto var2 = 3.14159;
	auto var3 = "Hallo";
	auto var4 = L"Язык программирования";
	auto var5 = new double[10];

	// Datentyp der Variablen ausgeben
	wcout << typeid(var1).name() << endl
		<< typeid(var2).name() << endl
		<< typeid(var3).name() << endl
		<< typeid(var4).name() << endl
		<< typeid(var5).name() << endl;

	// aufräumen nicht vergessen
	delete[] var5;

Führt man das Beispiel aus, so bekommt man folgende Bildschirmausgabe zu sehen.

auto Keyword Test
auto Keyword Test

Der Compiler erkennt aus dem Zusammenhang welcher Datentyp gemeint ist und deklariert automatisch eine passende Variable.
Man sollte dieses Konzept nicht mit der dynamischen Datentypzuweisung, wie es sie beispielsweise in PHP gibt, verwechseln. C++ besitzt eine statisch explizite Typisierung, deswegen kann man den Datentyp nach einmaliger Variablendeklaration nicht mehr ändern.

Was in dem ersten Beispiel nach einer Spielerei aussieht, erspart wirklich einiges an Schreibarbeit, wenn die Datentypen etwas komplexer werden.

	// Eine Liste mit irgendwelchen Zahlenwerten
	list<int> numbers;
	for(int i = 0; i < 10; i++)
		numbers.push_back(i*i);

	// Liste durchlaufen ohne auto
	for(list<int>::iterator it = numbers.begin(); it != numbers.end(); it++)
	{
		cout << *it << " ";
	}

	// Liste durchlaufen mit auto
	for(auto it = numbers.begin(); it != numbers.end(); it++)
	{
		cout << *it << " ";
	}

Man kann sich leicht vorstellen, dass bei noch komplexeren Datentypen (z.B. verschachtelte Maps mit Listen) das auto-Schlüsselwort noch mehr an Bedeutung gewinnt. Vor allem wird auch der Programmcode auch etwas leserlicher.

Für weitere Informationen schaut einfach in die MSDN-Dokumentation rein.
Sehr interessant ist auch die Funktionsweise von decltype im Zusammenspiel mit auto.

6 Gedanken zu „C++: auto Schlüsselwort“

  1. 1.) Was genau ist „list…“? Was macht das?
    2.) Für was stehen die „::“?!? Ich hab das bereits an vielen Orten gesehen, aber nie verstanden… Ein Beispiel wäre „std::cout“, aber es gibt auch andere beispiele.
    3.) „Numbers.begin(); und Numbers.end();“ sind selbst geschriebene Funktionen? Wie hast du das gemacht?

  2. In deinem Beispiel kann trotz des Aufrufs von ‚delete‘ ein memory leak entstehen:

    auto var5 = new double[10];

    //delete var5;
    delete [] var5;

    Damit wird der Speicher richtig freigegeben. Evtl. verhält es sich bei dem Schlüsselwort ‚auto‘ anders, aber ich wollte es nur mal ansprechen :-)

Schreibe einen Kommentar