C++/CLI és Managed C++

Vezérlési szerkezetek

Szekvencia, elágazás, feltétel nélküli ugrás, ciklusok

Teljesen megegyeznek a C++-ban használatosakkal.

Iterátorok

Az iterátorok segítségével bejárhatjuk egy tömb, gyűjtemény (ICollection), felsorolási típus elemeit, amelyre különböző metódusokat specifikáltak az IEnumerator interfészben:

Példa:

//a tömb inicializálása String* vStr = { S"alma", S"barack", S"körte", S"szilva" }; IEnumerator* vektorEnum = vStr->GetEnumerator(); while( vektorEnum->MoveNext() ) { String* elem = __try_cast<String*>( vektorEnum->Current ); Console::WriteLine( elem ); }

for each

A C++/CLI nyelvben megjelent egy új ciklus, mely iterált típusok bejárására ad lehetőséget, akárcsak C#-ban. A neve a C++/CLI elnevezési szabályokhoz illeszkedően két kulcsszóból áll: for each(típus változó in gyűjtemény). A for each viselkedése ebben a formában teljesen azonos a C#-beli megfelelőjével: a ciklus bejárja a teljes gyűjteményt, s minden elemére végrehajtja a ciklusmagot. Az aktuális elem a 'változó'-ba kerül, a referencia módosítására nincs lehetőség.

Van azonban egy specialitása a nyelvnek, melyet még a C# sem ismer: a ^% operátor, mely a C++-os *& operátor .NET-es megfelelője (referencia egy mutatóra). Ezen operátor segítségével lehetőségünk van az elemek módosítására is:

array^ arr = gcnew array(10); int i = 0; for each(String^% s in arr) s = i++.ToString();

Hagyományos for each ciklus végén lenne egy 10 elemű tömbünk csupa null String-el. A ^% operátor használata miatt azonban az elemeket inicializáltuk.