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
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
Ne zaman SQL Server noktalı virgül kul...
Ne zaman RequestFactory vs kullanmak G...
Ne zaman Bir HTML Varlıkları Kullanmak...
Basit Android Geri arama ne zaman bir ...
Ne zaman ugettext_lazy kullanmak gerek...