این نوع حلقه که در 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;
}