Outils pour utilisateurs

Outils du site


lang:cpp:condition

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lang:cpp:condition [2020/01/05 19:02] – Ajout des sources pour "fold" rootlang: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; 
-</code> 
  
-Attention aux ''else'' s'il y a des ''if'' imbriqués :+Les ''if'' peuvent s'optimiser avec les attributs [[lang:cpp:attribut#unlikely_et_likely|unlikely et likely]].
  
-<code cpp> +===Conditions multiples sur une même valeur : fold (opérateur ...)===
-if () +
-  if () +
-    une instruction; +
-else // Ici, l'indentation est mauvaise car le else correspond au second if. +
-  une instruction; +
-</code> +
- +
-===fold===+
 Avec les templates variadiques : Avec les templates variadiques :
  
Ligne 41: Ligne 22:
 }</code> }</code>
  
-[[https://h-deb.clg.qc.ca/Sujets/Divers--cplusplus/Fold-expressions.html|C++ et les Fold Expressions]] {{ :lang:cpp:condition:c_et_les_fold_expressions_2020-01-05_18_59_43_.html |Archive du 2016/11/27 le 05/01/2020+[[https://h-deb.clg.qc.ca/Sujets/Divers--cplusplus/Fold-expressions.html|C++ et les Fold Expressions]] {{ :lang:cpp:condition:c_et_les_fold_expressions_2020-01-05_18_59_43_.html |Archive du 2016/11/27 le 05/01/2020}} 
 + 
 +====switch/case==== 
 + 
 +Les ''switch''/''case'' peuvent s'optimiser avec les attributs [[lang:cpp:attribut#unlikely_et_likely|unlikely et likely]]. 
 + 
 +===Déclaration d'une variable dans un switch=== 
 +Une variable définie dans un ''case'' est accessible pour tous les ''case'' le suivant. On ne peut donc définir dans un ''case'' que des variables ayant un constructeur ''default''
 + 
 +Il est donc conseillé de mettre des ''{}'' entre chaque ''case''.
  
-}}====switch==== 
-===Cas courant=== 
-Les ''switch''/''case'' agissent comment des ''goto''. Il faut donc mettre un break pour éviter de passer à l'instruction suivante. 
 <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:
-    i = 2; +    // Valide car la classe A a un constructeur default. 
-    // break+    A a
-    // Sans break, l'instruction = 3 sera executée.+    // Non car si 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;
 +  }
 } }
 </code> </code>
Ligne 65: Ligne 75:
  
 <code cpp> <code cpp>
-constexpr size_t djb2a(const char* s, uint32_t h = 5381)+constexpr unsigned long djb2(char const *str)
 { {
-  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 = "texte";   std::string texte = "texte";
-  switch (djb2a(texte.c_str()))+  switch (djb2(texte.c_str()))
   {   {
-    case djb2a("texte"):+    case djb2("texte"):
       texte = "OK";       texte = "OK";
       break;       break;
Ligne 82: Ligne 98:
 </code> </code>
  
-<note important>Toute création d'un hash présente un risque de collision.</note> +<WRAP center round important 60%> 
- +Toute création d'un hash présente un risque de collision. 
-[[https://github.com/vivkin/constexprhash|constexprhash github]] {{ :lang:cpp:condition:constexprhash.h |Archive du 24/08/2016 le 05/01/2020}}+</WRAP>
  
lang/cpp/condition.1578247359.txt.gz · Dernière modification : 2020/01/05 19:02 de root