Şu andan itibaren C++11
, güç işlevleri grubuna (ve diğerleri) özel durumlar eklendi. C++11 [c.math] /11
tüm float/double/long double
aşırı yükleri listeledikten sonra (vurgularım ve başka kelimelerle ifade edilmiş):
Ayrıca, bir parametreye karşılık gelen herhangi bir bağımsız değişkenin türü veya bir tamsayı türüne sahip olması durumunda, parametrelere karşılık gelen tüm bağımsız değişkenlerin etkin bir şekilde dönüştürülmesini sağlamak için yeterli ek aşırı yükler olmalıdır .double
double
double
double
Yani, temelde, tamsayı parametreleri, işlemi gerçekleştirmek için iki katına yükseltilecektir.
Öncesinde C++11
(sorunuz sorulduğu zamandı), tamsayı aşırı yüklemesi yoktu.
Ben ne yakından yaratıcıları ile ilişkiliydi yana C
ne de C++
(Gerçi onların yaratılış günlerinde değilim doğrusu eski), ne de standartlarını oluşturdu ANSI / ISO komitelerinin parçası, bu mutlaka benim açımdan görüşüm. Bunun bilinçli bir fikir olduğunu düşünmek isterim ama eşimin size söyleyeceği gibi (sık sık ve çok fazla teşvik gerekmeden), daha önce yanılmışım :-)
Varsayım, değeri ne olursa olsun, takip eder.
Ben şüpheli orijinal öncesi ANSI nedeni C
tamamen gereksiz olduğundan bu özelliği yoktu olduğunu. İlk olarak, tamsayı güçleri yapmanın mükemmel bir yolu vardı (çiftler ile ve sonra basitçe bir tam sayıya dönüştürmek, dönüştürmeden önce tamsayı taşması ve yetersizliği kontrol etmek).
İkincisi, hatırlamanız gereken başka bir şey de, asıl amacının C
bir sistem programlama dili olduğudur ve bu alanda kayan noktanın istenip istenmediği sorgulanabilir.
İlk kullanım durumlarından biri UNIX'i kodlamak olduğu için, kayan nokta neredeyse yararsız olurdu. C'nin dayandığı BCPL'nin de güçler için bir faydası yoktu (bellekten hiç kayan noktası yoktu).
Bir kenara, bir bütünleşik güç operatörü muhtemelen bir kütüphane çağrısı yerine bir ikili operatör olurdu. Kitaplıktan ziyade dilin bir parçası olan x = add (y, z)
but with ile iki tamsayı eklemiyorsunuz .x = y + z
Üçüncüsü, integral gücün uygulanması görece önemsiz olduğundan, dil geliştiricilerinin zamanlarını daha yararlı şeyler sağlamak için daha iyi kullanacakları neredeyse kesindir (fırsat maliyetiyle ilgili aşağıdaki yorumlara bakınız).
Bu aynı zamanda orijinalle de ilgilidir C++
. Orijinal uygulama etkili bir şekilde sadece C
kod üreten bir çevirmen olduğu için C
,. Asıl amacı, sınıflarla-C-artı-biraz-ekstra-matematiksel şeyler değil, sınıflarla C idi.
Neden daha önce standartlara eklenmediğine gelince C++11
, standartları belirleyen kurumların takip etmesi gereken belirli yönergeler olduğunu unutmamalısınız. Örneğin, ANSI C
özel olarak yeni bir dil yaratmak için değil , mevcut uygulamayı kodlamakla görevlendirildi . Aksi takdirde çıldırabilirlerdi ve bize Ada'yı verebilirlerdi :-)
Bu standardın daha sonraki yinelemeleri de belirli yönergelere sahiptir ve mantık belgelerinde bulunabilir (dilin kendisi için mantık değil, komitenin neden belirli kararlar aldığına ilişkin mantık).
Örneğin, C99
gerekçe belgesi özellikle C89
eklenebilecekleri sınırlayan iki yol gösterici ilkeyi ileri taşımaktadır :
- Dili küçük ve basit tutun.
- Bir işlemi yapmanın tek bir yolunu sağlayın.
Yönergeler ( belirli olanlar zorunlu değildir ) bireysel çalışma grupları için belirlenir ve bu nedenle C++
komiteleri (ve diğer tüm ISO gruplarını) da sınırlar.
Buna ek olarak, standartları belirleyen kurumlar, aldıkları her kararın bir fırsat maliyeti (alınan bir karar için vazgeçmeniz gereken anlamına gelen ekonomik bir terim) olduğunun farkındadır . Örneğin, 10.000 dolarlık uber oyun makinesini satın almanın fırsat maliyeti, diğer yarınızla yaklaşık altı ay boyunca samimi ilişkiler (veya muhtemelen tüm ilişkiler).
Eric Gunnerson, Microsoft ürünlerine her şeyin neden her zaman eklenmediğine dair 100 puanlık açıklamasıyla bunu iyi açıklıyor - temelde bir özellik delikte 100 nokta başlatıyor, bu yüzden dikkate alınması için bile biraz değer katması gerekiyor.
Başka bir deyişle, bütünleşik bir güç operatörünü (dürüst olmak gerekirse, herhangi bir yarı-iyi kodlayıcı on dakikada kırbaçlayabilir) veya standarda eklenen çoklu iş parçacığı olmasını mı tercih edersiniz? Kendim için, ikincisine sahip olmayı ve UNIX ve Windows altındaki farklı uygulamalarla uğraşmak zorunda kalmamayı tercih ederim.
Standart kitaplığın binlerce ve binlerce koleksiyonunu da görmek isterim (karmalar, ağaç ağaçları, kırmızı-siyah ağaçlar, sözlük, rastgele haritalar vb.), Ancak mantıksal olarak şunu da belirtmek isterim:
Standart, uygulayıcı ve programcı arasındaki bir anlaşmadır.
Ve standart organlarındaki uygulayıcıların sayısı, programcıların (veya en azından fırsat maliyetini anlamayan programcıların) sayısından çok daha ağır basmaktadır. Tüm bu şeyler eklenirse, bir sonraki standart C++
bundan C++215x
üç yüz yıl sonra derleyici geliştiricileri tarafından tamamen uygulanacak ve muhtemelen uygulanacaktır.
Her neyse, bu konu hakkındaki (oldukça hacimli) düşüncelerim. Sadece oylar kaliteden çok niceliğe göre dağıtılırsa, yakında herkesi sudan çıkarırdım. Dinlediğin için teşekkürler :-)