statik constexpr deÄŸiÅŸken vs iÅŸlevi
static constexpr bir değişkeni ve bu örnekte olduğu gibi bir işlevi sürekli olarak ilan kayan nokta arasında bir fark aşağıda yoksa sadece tarz meselesi değil mi?
class MY_PI
{
public:
static constexpr float MY_PI_VAR = 3.14f;
static constexpr float MY_PI_FUN() { return 3.14f; }
}
CEVAP
constexpr fonksiyonlar
Fonksiyonları serbest değişken olmayan bir avantajı var (C 14-e kadar): kolayca bazı sınıf demirbaş olmadan şablon olabilir. ** 9 şablon bağımsız değişken olarak bir kesinlik ile olabileceği anlamına gelir
template<typename T>
constexpr T pi();
template<>
constexpr float pi() { return 3.14f; }
template<>
constexpr double pi() { return 3.1415; }
int main()
{
constexpr float a = pi<float>();
constexpr double b = pi<double>();
}
Eğer ücretsiz bir işlevi yerine static üye fonksiyonu kullanmaya karar verirseniz ancak, daha kısa ne de yazmak static üye değişkeni daha easir olmayacak.
constexpr deÄŸiÅŸkenler
Bir değişkeni kullanarak ana avantajı bu. Sabit, sağ mı istiyorsun?açıklar niyetve en önemli noktalardan biri olabilir.
Hala bir sınıf ile eşdeğer bir davranış olabilir, ama o zaman, eğer bir sınıf bir sınıf çeşitli matematik sabitleri içeren ise bu şekilde kullanmak gerekir:
constexpr float a = constants<float>::pi;
Ya böyle olursa sınıf pi temsil etmek için tasarlanmıştır
constexpr double = pi<double>::value;
İlk durumda, daha kısa yazmak olacaktır beri değişkenleri kullanmayı tercih edebilirsiniz ve bu gerçekten bir sabit kullanarak bir şeyler hesaplamak için çalışmıyorum olduğunuzu gösterecektir. Eğer sadece bir sınıf pi temsil eden, ancak bütün bir sınıf yerine constexpr ücretsiz bir fonksiyonu ile gidebiliriz. IMHO daha basit olurdu.
C 14: constexpr variable templates
Ancak, eğer C yerine C 14 kullanmayı seçerseniz 11 constexpr değişken şablonları, şu tür yazabilir. not:
template<typename T>
constexpr T pi = T(3.1415);
Bu gibi kod yazmak için izin verir:
constexpr float a = pi<float>;
C 14, bu işleri yapmak için tercih edilen bir yol olabilir. Eğer standart eski bir sürümünü kullanıyorsanız, ilk iki paragraf hala tutun.

Bir C işlevi içinde statik bir değişke...
Nasıl bu kabuk işlevi bir değişken çık...
sabit vs değişken üzerinde constexpr...
Sınıf içinde statik değişken yöntemler...
Nasıl global bir değişken ana adı yeri...