Tuzuna değer herhangi bir derleyici, herhangi bir yerleşik tür için her iki yapı için de tam olarak aynı makine dili sırasını üretecektir ( int,float uzun deyimi gerçekten olarak basit olarak olduğu kadar, vs) x = x + a; ve optimizasyon etkindir . (Özellikle, -O0varsayılan mod olan GCC'ler anti-optimizasyonlar gerçekleştirir hata ayıklayıcıların her zaman değişken değerleri bulabilmesini sağlamak için belleğe tamamen gereksiz depolar eklemek gibi .)
İfade daha karmaşıksa, farklı olabilirler. fBir işaretçi döndüren bir işlev olduğunu varsayalım , sonra
*f() += a;
fyalnızca bir kez arar , oysa
*f() = *f() + a;
iki kere arar. fYan etkileri varsa , ikisinden biri yanlış olacaktır (muhtemelen ikincisi). fYan etkileri olmasa bile , derleyici ikinci çağrıyı ortadan kaldıramayabilir, bu nedenle ikincisi gerçekten daha yavaş olabilir.
Ve burada C ++ hakkında konuştuğumuz için, aşırı yüklenen sınıf türleri için durum tamamen farklıdır operator+ve operator+=. Eğer xoptimizasyonu önce - - o zaman böyle bir türüdür x += açevirir
x.operator+=(a);
oysa x = x + açevirir
auto TEMP(x.operator+(a));
x.operator=(TEMP);
Şimdi, eğer sınıf düzgün bir şekilde yazılmışsa ve derleyicinin optimize edicisi yeterince iyiyse, her ikisi de aynı makine dilini üretecek, ancak yerleşik tipler için olduğu gibi kesin bir şey değil. Bu muhtemelen Stroustrup'un kullanımını teşvik ettiğinde düşündüğü şeydir +=.