Static_assert ne yapar ve ne için kullanmak istiyorsunuz?
static_assert(...) 'C 0x'
elde sorun zarif bir şekilde çözecek bir örnek verebilir misiniz?
Çalışma zamanı assert(...)
aşinayım. static_assert(...)
düzenli tercih assert(...)
etmeliyim?
Ayrıca, bir şey BOOST_STATIC_ASSERT
yok boost
static_assert(...)
aynı mı?
CEVAP
Statik derleme zamanında iddialar yapmak için kullanılır iddia. Statik onaylama işlemi başarısız olduğunda, program sadece derleme değildir. Bu eleştirel işlevi tam olarak 32 bit olan unsigned int
nesneye bağlı kodu ile bazı uygularsanız farklı durumlarda yararlıdır, örneğin gibi. Bir statik böyle iddia koyabilirsiniz
static_assert(sizeof(unsigned int) * CHAR_BIT == 32);
kodunuzda. Başka bir platform ile farklı boyutta unsigned int
tür derleme başarısız olur, böylece dikkatleri geliştirici sorunlu kısmı kod ve danışmanlık onları yeniden uygulamak veya yeniden inceleyin.
Başka bir örnek, belki geçmek istiyorum bazı integral değeri olarak void *
işaretçi işlevi (bir hack ama yararlı bazen) ve istediğiniz emin olmak için integral değeri sığacak içine işaretçi
int i;
static_assert(sizeof(void *) >= sizeof i);
foo((void *) i);
char
bu tür imzalı portföy isteyebilirsiniz
static_assert(CHAR_MIN < 0);
ya da negatif değerler ile ayrılmaz bir bölümü sıfıra doğru yuvarlar
static_assert(-5 / 2 == -2);
Ve benzeri.
Çalıştırma birçok durumda statik iddialar iddialar yerine kullanılabilir, ama çalıştırma iddialar sadece çalışma, çalıştırma ve kontrol geçer sadece iddia. Bu nedenle çalıştırma başarısız bir onaylama işlemi, uzun süre hareketsiz yatıyordu tespit edilmemiş olabilir.
Tabii ki, statik onaylama ifadesi, derleme zamanı sabiti olmalı. Çalışma zamanı değeri olamaz. Çalışma zamanı değerleri için başka bir seçenek var ama sıradan kullanım assert
.
Bir WordPress kullanmak için bir&; var...
(Ya da ihmal) kullanmak için zaman var...
Git bir sembolik bağlantı dosyaları iç...
Bir WordPress kullanmak en iyi bir şek...
Kullanarak ekranda bir DİV ortalamak i...