lang:cpp:condition
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| lang:cpp:condition [2020/01/05 18:43] – Création avec "if" et "switch" root | lang:cpp:condition [2020/06/16 15:15] (Version actuelle) – Fix typo root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====if==== | ====if==== | ||
| - | * Condition classique | + | |
| + | Les '' | ||
| + | |||
| + | ===Conditions multiples sur une même valeur : fold (opérateur ...)=== | ||
| + | Avec les templates variadiques : | ||
| <code cpp> | <code cpp> | ||
| - | if () | + | template <class T, class... Ts> |
| + | constexpr bool isin(T&& val, Ts&& | ||
| { | { | ||
| - | | + | |
| + | return ((arg == val) || ...); | ||
| } | } | ||
| - | else if () | ||
| - | une instruction; | ||
| - | else | ||
| - | une instruction; | ||
| - | </ | ||
| - | Attention aux '' | + | int main() |
| + | { | ||
| + | | ||
| + | return 0; | ||
| + | else | ||
| + | return 1; | ||
| + | }</ | ||
| - | < | + | [[https:// |
| - | if () | + | |
| - | if () | + | ====switch/ |
| - | une instruction; | + | |
| - | else // Ici, l'indentation | + | Les '' |
| - | une instruction; | + | |
| - | </ | + | ===Déclaration d'une variable dans un switch=== |
| + | Une variable définie dans un '' | ||
| + | |||
| + | Il est donc conseillé de mettre des '' | ||
| - | ====switch==== | ||
| - | ===Cas courant=== | ||
| - | Les '' | ||
| <code cpp> | <code cpp> | ||
| - | int i = 0; | + | class A |
| - | switch (i) | + | |
| { | { | ||
| + | public: | ||
| + | A() = default; | ||
| + | }; | ||
| + | |||
| + | class B | ||
| + | { | ||
| + | public: | ||
| + | B(){} | ||
| + | }; | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | int i = 0; | ||
| + | switch (i) | ||
| + | { | ||
| case 0: | case 0: | ||
| - | | + | // Valide car la classe A a un constructeur default. |
| - | | + | A a; |
| - | // Sans break, l' | + | // Non car si i vaut 1, le constructeur b ne sera pas appelé. |
| + | // error: cannot jump from switch statement to this case label | ||
| + | // B b1; | ||
| + | break; | ||
| case 1: | case 1: | ||
| - | i = 3; | + | { |
| + | // Valide car b2 ne sera pas accessible en dehors de case 1. | ||
| + | B b2; | ||
| + | break; | ||
| + | } | ||
| case 2: | case 2: | ||
| default: | default: | ||
| + | break; | ||
| + | } | ||
| } | } | ||
| </ | </ | ||
| Ligne 44: | Ligne 75: | ||
| <code cpp> | <code cpp> | ||
| - | constexpr | + | constexpr |
| { | { | ||
| - | return !*s ? h : djb2a(s + 1, 33 * h ^ (uint8_t)*s); | + | unsigned long hash = 5381; |
| + | int c = 0; | ||
| + | |||
| + | while ((c = *str++)) | ||
| + | hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ | ||
| + | |||
| + | return hash; | ||
| } | } | ||
| Ligne 52: | Ligne 89: | ||
| { | { | ||
| std::string texte = " | std::string texte = " | ||
| - | switch (djb2a(texte.c_str())) | + | switch (djb2(texte.c_str())) |
| { | { | ||
| - | case djb2a(" | + | case djb2(" |
| texte = " | texte = " | ||
| break; | break; | ||
| Ligne 61: | Ligne 98: | ||
| </ | </ | ||
| - | <note important> | + | <WRAP center round important |
| - | + | Toute création d'un hash présente un risque de collision. | |
| - | [[https:// | + | </WRAP> |
| - | ====fold==== | ||
lang/cpp/condition.1578246182.txt.gz · Dernière modification : de root
