SORU
20 Ocak 2011, PERŞEMBE


Ne zaman C 11 constexpr yeteneği kullanmak gerekir?

Bir sahip gibi geliyor bana "her zaman 5 işlev" ya da anlamını kırma sulandırma "fonksiyon çağırma". Bir nedeni, ya da bu özellik için bir ihtiyaç olmalı veya C 11'de olmaz. Niye orada?

// preprocessor.
#define MEANING_OF_LIFE 42

// constants:
const int MeaningOfLife = 42;

// constexpr-function:
constexpr int MeaningOfLife () { return 42; }

Bana öyle geliyor ki, eğer benim yazdığım bir fonksiyon döndüren bir edebi değeri, ve geldim bir kod inceleme, birinin geleceğini söyle bana, ben daha sonra ilan bir sabit değer yerine yazılı dönüş 5.

CEVAP
20 Ocak 2011, PERŞEMBE


Bir şey biraz daha karmaşık sanırım öyle.

constexpr int MeaningOfLife ( int a, int b ) { return a * b; }

const int meaningOfLife = MeaningOfLife( 6, 7 );

Şimdi iyi okunabilirliği korumak ve sadece bir sayı için sabit bir ayar daha karmaşık işleme izin verirken sabit değerlendirilmiş olabilir diye bir şey var.

O ne yaptığını daha açık hale geldikçe, temelde sürdürülebilirlik için iyi bir yardım sağlar. Örneğin max( a, b ):

template< typename Type > constexpr Type max( Type a, Type b ) { return a < b ? b : a; }

Oldukça basit bir seçim eğer sabit değerler max ararsan açıkça çalışma zamanında derleme zamanında ve hesaplanmamış olduğu anlamına geliyor ama burada.

Başka bir iyi örnek DegreesToRadians bir işlevi olacak. Herkes derece radyan daha okumak daha kolay bulur. 180 derece radyan cinsinden olduğunu biliyor olsa da aşağıdaki gibi daha açık yazılmıştır

const float oneeighty = DegreesToRadians( 180.0f );

İyi birçok bilgi burada:

http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=315

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • laptopmag

    laptopmag

    25 Ocak 2008
  • tychoadragmire

    tychoadragmi

    20 Mart 2006
  • Virtual Riot

    Virtual Riot

    19 Mayıs 2011