son reglas puntuacion ortograficas las gramaticales español cuáles c++ arrays for-loop

c++ - reglas - Es para(auto y a: a) gramaticalmente cierto?



reglas gramaticales pdf (2)

Por ejemplo, definí una matriz multidimensional

array<array<array<int, 3>, 4>, 5> a;

Y lo bucleo

for (auto& a : a) for (auto& a : a) for (auto& a : a) a = 1;

¿Es eso correcto en gramática? Probé en VS2015. Sin errores de compilación.


Es legal y hará lo que esperas, pero sigue siendo una mala idea reutilizar los nombres variables.

El C ++ 11 ranged-for se define como una transformación de origen, que coloca la definición de la variable de rango en un ámbito interno y realiza la evaluación de la expresión de rango fuera de ese alcance.

La Sección 6.5.4 dice que

La declaración basada en rango

for ( for-range-declaration : for-range-initializer ) statement

es equivalente a

{ auto &&__range = for-range-initializer ; auto __begin = begin-expr ; auto __end = end-expr ; for ( ; __begin != __end; ++__begin ) { for-range-declaration = *__begin; statement } }


Sí lo es :)

La razón es porque el a que declaras en el bucle for oculta la matriz original a :

for (auto& a : a) ^^^ ^^^^^^^^^ hides this ''a'' (the original array)

Y luego, es lo mismo una vez más.