C++ 1z "constexpr if" ifadesini tanıtacaktır - eğer koşullara bağlı olarak dallardan biri çıkarılacaksa. Makul ve kullanışlı görünüyor."constexpr" vs "ise" en iyi duruma getirme - neden "constexpr" gerekli?
Ancak, constexpr anahtar sözcüğü olmadan yapmak mümkün değil mi? Derleme sırasında derleyicinin, derleme zamanı sırasında wheter koşulunun bilindiğini bilmesi gerektiğini düşünüyorum. Öyleyse, en temel optimizasyon seviyesi bile gereksiz şube kaldırmalıdır. O0 bile gcc-4.4.7 derlemek "return 1" olmadığını,
int test() {
const bool condition = true;
if (condition) {
return 0;
} else {
// optimized out even without "constexpr if"
return 1;
}
}
Godbolt kaşif gösterileri, bu yüzden birlikte ne vaat edildi Hedefler:
Örneğin (: https://godbolt.org/g/IpY5y5 Godbolt görmek) eğer varsa. Açıkçası böyle bir eski derleyici durumun constexpr işlevinin sonucu olduğu zaman bunu yapamayacaktır, ancak gerçek şu ki: modern derleyici durumun constexpr olup olmadığını bilir ve açık bir şekilde söylememe gerek duymaz.
Yani soru şu:
Neden "constexpr" "eğer constexpr" ihtiyaç vardır?
Bu sadece bir optimizasyon meselesi değildir: “constexpr” in geçersiz olduğu bir alanın geçersiz olmasına izin verilir, yani kendi başına derlenmez. Senin sorunun duruyor. – Quentin