2011-09-17 11 views
5

Derleyicinin, aynı sınıftaki işlevlerin ona erişebildiğini bilerek, satır içi satır içine almasına izin veriyor mu? Ya da sadece programcının rahatlığı için mi?'Özel' erişim değiştirici, derleyiciye optimizasyon için daha fazla yer veriyor mu?

+0

Herhangi bir iyi derleyici, mantıklı olduğunda ve mantıklı olduğunda sanal olmayan bir yöntemi satır içinde gösterir. Erişilebilirlik ile ilgili bir şey yoktur, çünkü bu yöntem uygulanmasını değiştirmez. –

+0

Geçen hafta aynı soruyu sormaya gidecektim. Bir işlev özel olduğu için derleyicinin farklı kod üreteceği herhangi bir örnek düşünemedim. Herhangi bir örnek? – JohnPS

cevap

6

derleyici önerdiğiniz olarak optimize (ancak gerekli değildir), ama bu noktası değil olabilir. Erişim değiştiricilerin noktası, derleme zamanında programlama hatalarının belirli sınıflarını (punto içermeyen) yakalamaktır. Özel işlevler, birisinin onları sınıfın dışından çağırması durumunda, bu, hata olur ve bunu olabildiğince erken bilmek istersiniz.

("Derleyicinin bu bilgilere dayanarak optimizasyonlar yapması mümkün olabilir" sorusunu sorduğunuz her zaman, "evet, standartta izin verilmediğini söyleyen belirli bir kural yoksa" yanıtı " Tüm amacı optimizasyonları engellemek olan volatile için kurallar.Ancak, derleyiciler herhangi bir bilgi parçasına göre en iyi duruma getirme zorunluluğu yoktur.Öncelikle, herhangi bir optimizasyon herhangi bir optimizasyon yapmak için hiçbir gereklilik yoktur Derleyicinizin ne kadar akıllı olduğu, günümüzde büyük ölçüde ne kadar uzun süre çalışmasına izin verdiğinize bağlıdır: MSVC'nin tüm programlı PGO modu sanal yöntem gönderme yoluyla arasında bağlantı kurabilir - en olası hedefi tahmin eder ve geri düşer düzenli olarak varsayımın yanlış olması durumunda çalışma zamanında sanal çağrı - ancak en az iki faktörle derlemeleri yavaşlatır.)

+0

Sadece bir satır içi yöntemi yapmak için tek iyi neden, bu yeterince küçük olduğunu eklemek için. Aradığı yerden bir şey yok. –

+0

harika yanıt: D – slartibartfast

+0

Derleyicinin, herhangi bir şekilde optimize edilmiş, farklı bir kod üretmek için bir işlevin özel olduğunu nasıl kullanabileceğine dair bir örnek verebilir misiniz? – JohnPS

4

Erişim belirticileri, Derleme ve Soyutlama için OOP ilkelerini uygulayan ve derleyiciler için optimizasyon gerçekleştirmeyen C++ mekanizmasının bir parçasıdır.

Bazı akıllı derleyici bunun üzerinden bazı optimizasyonlar uygulayabilir, ancak C++ Standardı tarafından zorunlu kılmaz. Erişim belirleyicilerinin amacı Optimizasyon değil, C++ dili tarafından desteklenen ilkeler için dil yapılarını kolaylaştırmaktır.

İlgili konular