این نوع حلقه که در c++11(همان C++0x) معرفی شد، الآن در زبان های برنامه نویسی جاوا، سی شارپ، پایتون، پرل و روبی وجود دارد،و برای انجام دادن یک عمل برای تمام اعضای یک مجموعه - مثلا یک آرایه - است. کد زیر را در نظر بگیرید:

int ary[5] = {1, 2, 4, 8, 16};
for (int i = 0; i < 5; i++){
cout << ary[i] << endl;
}

اما با استفاده از حلقه for-each میتوانید کار بالا را بصورت زیر انجام بدهید:

int ary[5] = {1, 2, 4, 8, 16};
for (a : ary){
cout << a << endl;
}

سینتکس کلی بصورت زیر هست:

for ( range_declaration : range_expression ) loop_statement

 در range_declaration باید متغیری رو که هر بار برابر با یکی از عناصر range_expression قرار میگیره رو تعریف بکنید، میتونید از کلمه کلیدی auto(که در C++11) معرفی شد استفاده بکنید یا خودتون یک نوع رو مشخص بکنید:

int ary[5] = {1, 2, 4, 8, 16};
for (auto a : ary){
cout << a << endl;
}

همچنین میتونید از یک نوع ارجاعی استفاده بکنید تا بتونید همزمان عناصر رو تغییر هم بدید:

int ary[5] = {1, 2, 4, 8, 16};
for (int& a : ary){
a *= 2;
}

اما کاری که میتونستید با حلقه for معمولی بکنید و با for-each نمیتونید بکنید، فهمیدن index عنصر فعلی هست، حلقه for-each امکانی رو برای این نداره، لذا باید خودتون یک متغیر تعریف کنید و هر بار افزایش بدیدش.

int ary[5] = {1, 2, 5, 8, 16};
int index = 0;
for (int a : ary){
cout << "Element #" << index++ << " is " << a << endl;
}