Guideline for how to declare variables in a range-based for loop
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Documentación
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- cpp
- Área
- documentation
Línea de trabajo
Comienza revisando las recomendaciones existentes de Con.1 y ES.71 y los cinco comentarios sobre este issue. Determina si la regla propuesta debería reemplazar o aclarar esas recomendaciones, incluidos los casos de range-based-for citados. Se considera terminado cuando se haya tomado una decisión y se haya documentado la recomendación acordada en la sección relevante de C++ Core Guidelines.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
A question which comes up every now and then is what type of loop variable you should use for range-based for, particularly when no mutation takes place.
// case (1) - cheap to copy
for (int x : container) // disallowed in this form by Con.1, should be 'const int'
// vs
for (const int &x : container)
// case (2) - expensive to copy
for (string x : container) // disallowed in this form by ES.71, should be 'const string &x'
// vs
for (const string &x : container)
I think we should recommend to always declare the loop variable as a reference, never as a value, and here's why:
- The rule is simple and consistent.
- When mutating a
T&variable in the loop, you are already forced to follow it by the language. - If you aren't, and you have case (2), then ES.71 already tells you to.
- Otherwise, if you are following Con.1, then
const T xis only one character away fromconst T &x, so it costs very little effort to follow this rule. - It is possible and relatively easy to enforce with automatic tooling.
- It prevents bugs related to taking the address of the local variable, instead of taking the address of the object within the container.
- Even for weird iterators like
std::ranges::iota_view::iterator, where theirreferenceis actually a value, this method is robust becauseconst&allows for temporary materialization.
In essence, I don't see any benefit to non-reference loop variables, and the alternative is consistent, easy, correct by default, and already recommended in part.
- Lenguaje dominante
- CSS
- Estrellas
- 45.3k
- Forks
- 5.6k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de isocpp/CppCoreGuidelines
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 75/100
isocpp/CppCoreGuidelines#2338 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
isocpp/CppCoreGuidelines#2205 · 8 comentarios ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 64/100
isocpp/CppCoreGuidelines#1649 · 3 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 42/100
isocpp/CppCoreGuidelines#2336 · 4 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
isocpp/CppCoreGuidelines#2335 · 2 comentarios ·
Todos los issues de isocpp/CppCoreGuidelines
Issues similares
-
Provide a docinit functionaliyAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
inu-appcenter/memorIN-frontend#106 ·
Los mantenedores suelen responder en 1 día
-
workflow: a tick's dispatch counts as 'only this step', and no review self-grants a round unattendedAbiertoworkflow
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
kristofdegrave/homeassistant-smart-charging#1505 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
openfoodfacts/score-my-recipe#80 ·
Los mantenedores suelen responder en 2 días
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
githubnext/gh-aw-workshop#3968 ·
Los mantenedores suelen responder en 1 día