SORU
29 NİSAN 2013, PAZARTESİ


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
30 NİSAN 2013, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • VOICE TV

    VOICE TV

    2 Aralık 2010