Non fa alcuna differenza per il valore di col
all'interno del ciclo - supponendo che col
sia un valore primitivo. Se col
fosse una classe, gli operatori di prefisso e postfix '++' potrebbero essere sovraccaricati per fare due cose diverse, anche se lo considererei una cattiva pratica. Si consideri il seguente esempio:
#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;
}
}
Entrambi questi Basta stampare fuori 0-9, nonostante il fatto che si pre-incremento in uno, e post-incremento nell'altra. L'incremento di i
si verifica alla fine di ogni ciclo del ciclo indipendentemente dal fatto che si utilizzi o meno l'incremento pre o post. Credo che il pre-incremento sia più efficiente, dal momento che - e potrei sbagliarlo - il compilatore non ha quindi bisogno di usare una variabile temporanea 1., ma ciò sarebbe evidente solo se si esegue il looping per un tempo molto lungo (e, naturalmente, 'More computing sins are committed in the name of efficiency than for any other single reason')
per quanto riguarda la domanda 2:.
domanda 2: Sarebbe utilizzando >> = 1U invece di =/2 fa alcuna differenza?
Improbabile. Lo spostamento dei bit sarebbe più veloce se il compilatore non ottimizzasse, ma è probabile che il compilatore ottimizzerà questo in un piccolo cambiamento.
Come nota a margine, io in genere trovano a fare unsigned variableName
(vale a dire, lasciando cadere il int
) cattiva pratica - anche se C++ sarà spingere in un int
ovunque uno è mancante, è meno leggibile per me.
1.: Stephen nei commenti (un diversa Stefano;)) nota che - "Pre-incremento è più efficiente per iteratori contenitore libreria standard, ma non è diverso per i tipi primitivi, dal momento che la copia di un intero è più economico rispetto alla copia di un iteratore più grande (in particolare std :: set e std :: map iterators). "
Se ricordo male, in questo caso non fa alcuna differenza. Fa una differenza quando si usa la variabile come 'R-Value' in questo modo:' a = b ++; 'o' a = ++ b; ' –
Le risposte per quella domanda sono per lo più errate, Greg. Rispondono a ciò che post e pre incrementation sono, ** non ** come funzionano in un loop - anzi molti di questi sono fuorvianti in quanto si applicano che fa la differenza perché usano una sintassi fuorviante per i loro loop ('int i = 0; foreach (randomOtherThing in randomOtherThings) '...) – Stephen
Ok. E la seconda domanda? – Ahmed