Statique affirmer, c'est utilisé pour faire des assertions au moment de la compilation. Lors de la statique de l'assertion échoue, le programme ne compile pas. Ceci est utile dans différentes situations, comme, par exemple, si vous mettez en œuvre certaines fonctionnalités par le code qui dépend de façon critique sur unsigned int
objet ayant exactement 32 bits. Vous pouvez mettre un statique affirmer comme ceci
static_assert(sizeof(unsigned int) * CHAR_BIT == 32);
dans votre code. Sur une autre plate-forme, de taille différente unsigned int
type de la compilation échouera, attirant ainsi l'attention de le développeur à la problématique de la portion de code et de les conseiller à re-mettre en œuvre ou de ré-inspecter.
Pour un autre exemple, vous pourriez souhaitez passer quelques intégrale de la valeur en tant que void *
pointeur vers une fonction (un hack, mais utile à la fois) et que vous souhaitez assurez-vous que l'intégrale de la valeur de l'ajustement dans le pointeur
int i;
static_assert(sizeof(void *) >= sizeof i);
foo((void *) i);
Vous pourriez atout char
type est signé
static_assert(CHAR_MIN < 0);
ou que l'intégrale de la division avec des valeurs négatives tours vers zéro
static_assert(-5 / 2 == -2);
Et ainsi de suite.
Au moment de l'exécution des assertions dans de nombreux cas, peut être utilisé à la place de la statique des assertions, mais au moment de l'exécution des affirmations fonctionnent uniquement au moment de l'exécution, et seulement lorsque le contrôle passe au-dessus de l'assertion. Pour cette raison, un défaut d'exécution affirmation peut latente, d'inaperçue pendant de longues périodes de temps.
Bien sûr, l'expression statique affirmation doit être une constante de compilation. Il ne peut pas être une valeur d'exécution. Pour les valeurs d'exécution que vous n'avez pas d'autre choix que d'utiliser l'ordinaire, assert
.