Statik iddia, derleme sırasında iddialarda bulunmak için kullanılır. Statik iddia başarısız olduğunda, program derlenmez. Bu, örneğin, unsigned int
tam olarak 32 bit olan nesneye kritik olarak bağlı olan bazı işlevleri kodla uygularsanız, farklı durumlarda kullanışlıdır . Bunun gibi statik bir iddia koyabilirsiniz
static_assert(sizeof(unsigned int) * CHAR_BIT == 32);
kodunuzda. Başka bir platformda, farklı boyutta unsigned int
tipte derleme başarısız olur, böylece geliştiricinin dikkatini kodun sorunlu kısmına çeker ve onlara kodu yeniden uygulamalarını veya yeniden incelemelerini tavsiye eder.
Başka bir örnek için, void *
bir işleve işaretçi olarak bazı integral değerleri iletmek isteyebilirsiniz (bir hack, ancak bazen yararlıdır) ve integral değerinin işaretçiye sığacağından emin olmak isteyebilirsiniz.
int i;
static_assert(sizeof(void *) >= sizeof i);
foo((void *) i);
Bu char
türün imzalı olduğunu belirtmek isteyebilirsiniz
static_assert(CHAR_MIN < 0);
veya negatif değerli integral bölme sıfıra yuvarlanır
static_assert(-5 / 2 == -2);
Ve bunun gibi.
Çoğu durumda çalışma zamanı iddiaları, statik iddialar yerine kullanılabilir, ancak çalışma zamanı iddiaları yalnızca çalışma zamanında ve yalnızca denetim iddianın üzerinden geçtiğinde çalışır. Bu nedenle, başarısız bir çalışma zamanı iddiası, uzun süreler boyunca fark edilmeden uykuda kalabilir.
Elbette, statik iddiadaki ifade bir derleme zamanı sabiti olmalıdır. Çalışma zamanı değeri olamaz. Çalışma zamanı değerleri için sıradan olanı kullanmaktan başka seçeneğiniz yoktur assert
.