C++0x : auto declaraties

Jarenlang was C++ voor mij de belangrijkste programmeertaal. Hoewel ik nog steeds C++ projecten doe, is mijn aandacht de laatste jaren meer richting .NET en C# verschoven. Om die reden heb ik ook nooit veel interesse gehad voor C++0x: een nieuwe C++ standaard.

Laatst werd toch mijn interesse voor C++ weer gewekt door een serie op Channel 9 over de Standard Template Library (STL). Zijdelings kwamen hier ook een aantal interessante features van C++0x aan de orde. Features die me meteen aan C# deden denken.

Eén van die nieuwe features van C++0x is de introductie van het auto keyword. Voor degenen die bekend zijn met C#: het auto keyword is vergelijkbaar met het var keyword in C#.

De belangrijkste reden voor mij om het auto keyword te gaan gebruiken is: mezelf ergernis besparen en leesbaarheid van de code verhogen.

Neem bijvoorbeeld de volgende, volstrekt gebruikelijke, code om een associatieve lijst (met key en value elementen) te doorlopen:

map<int, vector<string>*> *m = new map<int, vector<string>*>();

// ... doe iets met m ... (code weggelaten)

for(map<int, vector<string>*>::iterator i = m->begin();
    i != m->end(); ++i)
{
    int key = i->first;
    vector<string>* value = i->second;

    // ... doe iets met key en value (code weggelaten)    
}

De declaratie syntax van de variabelen m en i ziet er belachelijk complex uit. Iemand die niet met C++ bekend is, zou denken dat de programmeur hier een beetje de hacker uit zit te hangen.

Hier komt auto van pas:

auto m = new map<int, vector<string>*>();

// ... doe iets met m ... (code weggelaten)

for(auto i = m->begin();
    i != m->end(); ++i)
{
    auto key = i->first;
    auto value = i->second;

    // ... doe iets met key en value (code weggelaten)    
}

Dat ziet er toch stukken beter uit! Bij het gebruik van auto zal de compiler het type afleiden uit de context. Het is dan niet nodig om het type expliciet te benoemen. Redundantie (in de vorm van het telkens herhalen van types) wordt op die manier voorkomen.

Alle type-informatie in bovenstaande voorbeeld is te vinden in de eerste regel. En dan alleen nog maar aan de rechterkant van het = teken. Op de plaatsen waar auto is gebruikt, is het type door de compiler af te leiden.

C++0x kent ook nog een voorstel om de for-lus syntax te vereenvoudigen. De for-lus zou er dan ongeveer zo uit kunnen zien:

for(auto i : *m)

Helaas wordt deze syntax niet ondersteund door Visual Studio 2010.

Advertenties
Dit bericht werd geplaatst in C++. Bookmark de permalink .

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s