Bu uygulama kolaylaştırır. Bu muhtemelen "Neden" diye cevap veriyor, ama bunu nasıl yaptığını söylemiyor.
Bir tek bir dönüş değeri ile fonksiyon ve yerel değişkenler olmadan daha özel bir, bir derleyici için özel bir durumdur. Bu işlev artık tek bir ifadeden oluşuyor: işlevin AST'sinin yalnızca tek bir köke sahip olması gerekiyor. Değişkenlerin eksik olması, bu ifadenin işlenebilmesi için bir tam-üflemeli sanal makine olmadan değerlendirilebileceği anlamına gelir, bunun yerine basit bir ağaç ifadesi değerlendiricisi kullanılabilir. Muhtelif nedenlerden dolayı derleyicinin büyük olasılıkla böyle bir değerlendiriciye sahip olması ya da nispeten kolay bir tane oluşturabilmesi (bir ağaç sadeleştirme geçişi olur). Sadece constexpr
ifade içinde kullanılır bilerek
da önemli bir basitleştirme sağlar. Bu işlev, AST işlevindeki her köşe noktasının, bir işlev çağrısı olsa bile, aynı özelliklere sahip olmasını garanti eder. constexpr
mekanizmasının tamamı, daha sonra genelleştirilmiş bir const-katlama şeklidir. Ve her zaman derleyicide bu yüksek düzeyde yapılmasa da, büyük bir çaba olmadan (tam bir VM'ye kıyasla) uygulanabilmesini sağlar. "Neden" sorusuna
Geri. Kısıtlama, öncelikle satıcılar üzerindeki kaynak sınırlamaları tarafından yürütülür. Bu özellik, belirtildiği gibi, büyük bir çaba değildir ve bu nedenle satıcılar, makul bir süre içinde gerçekte uygulayabilirler. Bu tür kısıtlamalar olmasaydı, özellikle yerel değişkenlere izin vermek gerekirse, gereken iş miktarını büyük ölçüde artırır. Kullanıcının bakış açısından (biz, programcılar), kısıtlamalar tamamen keyfidir.
Derleyici uygulamaları için bunu basit tutmak için bir araç olduğundan şüpheleniyorum. – juanchopanza
Çünkü Standart öyle diyor. Daha genel işlevlerin kullanılmasına izin vermek derleyici yazarların yaşamını oldukça zorlaştıracaktır (yine de, C++ 14 bu kısıtlamaların bazılarını kaldırmaktadır) –
Değişkenlere izin vermek, başka birçok (daha karmaşık) kısıtlamanın eklenmesi anlamına gelecektir. Böylece tanıtımları için basit tuttular. Neyse etrafında yolları – Dave