sentencia - ¿Soportará C++ 17 el For Loop basado en rango más simple?
sentencia for en c (3)
Desde C ++ 11, podemos escribir:
vector<int> v{1, 2, 3, 4};
for (auto x : v)
{
cout << x << endl;
}
Según Essentials of Modern C ++ Style , el siguiente código pronto también será legal en C ++:
vector<int> v{1, 2, 3, 4};
for (x : v)
{
cout << x << endl;
}
¿Estará disponible esta característica en C ++ 17 o C ++ 20?
Actualizar
GCC 5.1 permite esta sintaxis con -std = c ++ 1z.
Esto ya no está permitido desde GCC 6.1.Así que esta respuesta no parece ser correcta.
El compilador de Ideone compila exitosamente dicho código bajo C ++ 14:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v {1, 2, 3, 4};
for (x : v)
cout << x << endl;
return 0;
}
Esto sigue siendo cplusplus.github.io/EWG/ewg-active.html#81 . Hubo una propuesta, vinculada allí, para agregar esto a C ++ 17. Esa propuesta fue rechazada . La aceptación de una nueva propuesta depende de la propuesta, por lo que es demasiado pronto para decir si C ++ 20 podría tenerla.
No. Esto fue asesinado por el comité hace más de dos años , principalmente debido a las preocupaciones sobre la posible confusión causada por el seguimiento:
std::vector<int> v = { 1, 2, 3, 4 };
int x = 0;
for(x : v) {} // this declares a new x, and doesn''t use x from the line above
assert(x == 0); // holds
Las objeciones surgieron tan tarde en el proceso que tanto Clang como GCC ya habían implementado la función en el momento en que fue rechazada por el comité completo. Las implementaciones finalmente fueron retiradas: Clang GCC