lang:cpp:condition
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
lang:cpp:condition [2020/01/05 19:02] – Ajout des sources pour "fold" root | lang:cpp:condition [2020/06/16 15:15] (Version actuelle) – Fix typo root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====if==== | ====if==== | ||
- | ===Condition classique=== | ||
- | <code cpp> | ||
- | if () | ||
- | { | ||
- | plusieurs instructions; | ||
- | } | ||
- | else if () | ||
- | une instruction; | ||
- | else | ||
- | une instruction; | ||
- | </ | ||
- | Attention aux '' | + | Les '' |
- | <code cpp> | + | ===Conditions multiples sur une même valeur : fold (opérateur ...)=== |
- | if () | + | |
- | if () | + | |
- | une instruction; | + | |
- | else // Ici, l' | + | |
- | une instruction; | + | |
- | </ | + | |
- | + | ||
- | ===fold=== | + | |
Avec les templates variadiques : | Avec les templates variadiques : | ||
Ligne 41: | Ligne 22: | ||
}</ | }</ | ||
- | [[https:// | + | [[https:// |
+ | |||
+ | ====switch/ | ||
+ | |||
+ | Les '' | ||
+ | |||
+ | ===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 65: | 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 73: | 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 82: | Ligne 98: | ||
</ | </ | ||
- | <note important> | + | <WRAP center round important |
- | + | Toute création d'un hash présente un risque de collision. | |
- | [[https:// | + | </WRAP> |
lang/cpp/condition.1578247359.txt.gz · Dernière modification : 2020/01/05 19:02 de root