No hace ninguna diferencia en el valor de col
dentro del ciclo - suponiendo que col
es un valor primitivo. Si col
fuera una clase, los operadores de prefijo y postfix '++' podrían estar sobrecargados para hacer dos cosas diferentes, aunque yo consideraría que es una mala práctica. Consideremos el siguiente ejemplo:
#include <iostream>
using namespace std;
int main() {
for(int i = 0; i < 10; i++) {
cout << i << endl;
}
cout << endl;
for(int i = 0; i < 10; ++i) {
cout << i << endl;
}
}
Ambos simplemente imprima 0 a 9, a pesar del hecho de que usted pre-incremento en uno, y post incremento en la otra. El incremento de i
ocurre al final de cada ejecución del ciclo, ya sea que use o no el incremento previo o posterior. Creo que el pre-incremento es más eficiente, ya que, y puedo estar equivocado aquí, el compilador no necesita usar una variable temporal 1., pero esto solo se notará si hace un bucle durante mucho tiempo (y por supuesto 'More computing sins are committed in the name of efficiency than for any other single reason')
en cuanto a la pregunta 2:.
pregunta 2: ¿Quieres utilizando >> = 1U en lugar de =/2 hace ninguna diferencia?
Unlikely. El cambio de bit sería más rápido si el compilador no se optimizara, pero es probable que su compilador optimice esto en un cambio de bit.
Como nota al margen, por lo general se encuentran haciendo unsigned variableName
(es decir, dejar caer el int
) mala práctica - a pesar de C++ le mete en un int
en cualquier lugar uno se encuentra, es menos legible para mí.
1.: Stephen en los comentarios (un diferente Stephen;)) señala que - "Pre-incremento es más eficiente para iteradores contenedores biblioteca estándar, pero no es diferente para los tipos primitivos, ya que la copia de un número entero es más barato que copiar un iterador más grande (en particular std :: set y std :: iteradores de mapa) ".
Si no recuerdo mal, en este caso no hace ninguna diferencia. Hace una diferencia al usar la variable como un 'Valor-R' como:' a = b ++; 'o' a = ++ b; ' –
Las respuestas para esa pregunta son en su mayoría incorrectas, Greg. Responden lo que son post e incremento previo, ** no ** cómo funcionan en un bucle - de hecho, muchos de ellos son engañosos en el sentido de que aplican que sí hace una diferencia porque usan una sintaxis engañosa para sus bucles ('int i = 0; foreach (randomOtherThing en randomOtherThings) '...) – Stephen
Ok. ¿Qué hay de la 2da pregunta? – Ahmed