C: ++i ile i++ arasındaki fark nedir?

C'de, ++i ve i++ kullanımı arasındaki fark nedir ve bir for döngüsünün artırma bloğunda hangisi kullanılmalıdır?

Çözüm
  • ++i,i` değerini artıracak ve ardından artırılmış değeri döndürecektir.

       i = 1;
       j = ++i;
       (i 2'dir, j 2'dir)
  • i++,ideğerini artırır, ancaki` değerinin artırılmadan önce sahip olduğu orijinal değeri döndürür.

       i = 1;
       j = i++;
       (i 2, j 1'dir)

Bir for döngüsü için her ikisi de işe yarar. ++i` daha yaygın görünmektedir, belki de K&R'de kullanılan budur.

Her durumda, "i++ yerine ++i tercih edin" yönergesini izleyin ve yanlış gitmeyeceksiniz.

Burada ++i ve i++'nin verimliliğine ilişkin birkaç yorum bulunmaktadır. Öğrenci projesi olmayan herhangi bir derleyicide performans farkı olmayacaktır. Bunu üretilen koda bakarak doğrulayabilirsiniz, kod aynı olacaktır.

Verimlilik sorusu ilginç... işte benim cevap girişimim:

Freund'un belirttiği gibi, operator++() bir fonksiyon olduğundan ve derleyici ara değeri tutmak için geçici bir nesne oluşturmayı optimize etmeyi bilemediğinden, bir C++ nesnesi için durum farklıdır.

Yorumlar (14)

++i` değeri artırır ve sonra geri döndürür.

i++` değeri döndürür ve ardından değeri artırır.

Bu ince bir fark.

Bir for döngüsü için, biraz daha hızlı olduğu için ++i kullanın. i++` fazladan bir kopya oluşturacak ve bu kopya atılacaktır.

Yorumlar (2)

i++inini++dan biraz daha hızlı olabilmesinin *nedeni,i++i değerinin artırılmadan önce yerel bir kopyasını gerektirebilirken,++i`nin bunu asla yapmamasıdır. Bazı durumlarda, bazı derleyiciler mümkünse bunu optimize edecektir... ancak bu her zaman mümkün değildir ve tüm derleyiciler bunu yapmaz.

Derleyicilerin optimizasyonlarına çok fazla güvenmemeye çalışıyorum, bu yüzden Ryan Fox'un tavsiyesine uyuyorum: her ikisini de kullanabildiğimde, ++i kullanıyorum.

Yorumlar (1)