Outils pour utilisateurs

Outils du site


developpement:cpp:modern

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
developpement:cpp:modern [2022/10/21 15:10] – [Ressources] sgariepydeveloppement:cpp:modern [2022/12/14 15:46] (Version actuelle) – [Assert] sgariepy
Ligne 250: Ligne 250:
 }; };
 </code> </code>
 +
 +==== Tableau statique ====
 +
 +  * Taille fixe d'éléments d'un même type
 +  * La taille est fixé au moment de la compilation et ne peut pas grandir (sauf C99)
 +  * Les éléments sont stockés de façon séquentielle et en continu
 +  * Chaque élément a son propre emplacement
 +    * Accessible via sa position
 +    * Ont un index de base 0
 +
 +Points importants:
 +
 +  * Les arrays n'est pas un pointeur
 +    * ''<type>[size]'', e.g. ''int arr[]'' est ''int[5]''
 +  * Mais accessible via la syntaxe de pointeurs
 +  * Un array peut être assigné à un tableau
 +    * Le pointeur détient l'adresse du premier élément
 +    * Les autres éléments peuvent être accédés via l'index ou en incrémentant le pointeur
 +
 +<code cpp>
 +int arr1[5];  // tableau non initialisé
 +int arr2[5]{}; // éléments initialisés avec 0
 +int arr3[5]{ 1, 2, 3, 4, 5 }; // initialisé avec les valeurs spécifiés
 +</code>
 +
 +<code>
 +int *p = arr3;
 +*(p + 2) = 800; // Le 3e élément (index 2) aura la valeur 800
 +</code>
 +
 +==== Passer un tableau à une fonction ====
 +
 +<code cpp>
 +void Print(int *ptr, int size) {
 +    for (int i = 0; i < size; ++i) {
 +        std::cout << ptr[i] << ' ';
 +        //std::cout << *(ptr + i) << ' '; // moins lisible, donc la façon précédente est préférable
 +    }
 +}
 +
 +Print(arr3, sizeof(arr3) / sizeof(int));
 +</code>
 +
 +En tant que référence:
 +
 +<code cpp>
 +template<typename T, int size>
 +void Print(T(&ref)[size]) {
 +    for (int i = 0; i < size; ++i) {
 +        std::cout << ref[i] << ' ';
 +    }
 +}
 +
 +int(&ref)[5] = arr3;
 +Print(arr);
 +</code>
 +
  
  
Ligne 376: Ligne 433:
 sequence = "C++" + " is powerful";  // Illegal: two C-Style strings can't concatenate this way sequence = "C++" + " is powerful";  // Illegal: two C-Style strings can't concatenate this way
 </code> </code>
 +
 +===== Regex =====
 +
 +Définir un regex:
 +
 +<code cpp>
 +std::regex regex(R"(\d{2}));
 +</code>
 +
  
  
Ligne 868: Ligne 934:
 int *int_ptr {nullptr}; int *int_ptr {nullptr};
 </code> </code>
 +
 +==== Endianess ====
 +
 +  * Little endian: Le dernier byte d'une adresse est stocké en premier (c'est le cas avec Windows)
 +  * Big endian: Le premier byte d'une adresse est stocké en premier
 +
 +Illustration du Little Endian:
 +
 +{{:developpement:cpp:little_endian.png?600|}}
 +
 +Ici on voit que l'adresse du pointeur ''ptr'' est ''0x001FFCC0'' et sa valeur est l'adresse de ''data'', c'est-à-dire ''0x001FFCCC'' Mais dans la mémoire, si on inspecte la valeur à cet endroit, on verra ''CC FC 1F 00''.
 +
 +
 +
  
 ===== Accéder/Stocker à l'adresse du pointeur ===== ===== Accéder/Stocker à l'adresse du pointeur =====
Ligne 3304: Ligne 3384:
   * may or may not cause the program to terminate   * may or may not cause the program to terminate
  
- +<code> 
- +#include <stdexcept> 
 +... 
 +throw std::runtime_error{"An error occured"}; 
 +</code>
  
 ====== I/O and Streams ====== ====== I/O and Streams ======
Ligne 4283: Ligne 4365:
 </code> </code>
  
 +
 +
 +====== Assert ======
 +
 +<code cpp>
 +#include <cassert>
 +...
 +assert(!Empty());
 +</code>
  
  
Ligne 4290: Ligne 4381:
   * [[https://github.com/fffaraz/awesome-cpp|Awesome C++]]   * [[https://github.com/fffaraz/awesome-cpp|Awesome C++]]
   * [[https://mongoose.ws/|Mongoose]]   * [[https://mongoose.ws/|Mongoose]]
 +  * [[https://hackingcpp.com/|Hacking C++]]
  
developpement/cpp/modern.1666357859.txt.gz · Dernière modification : 2022/10/21 15:10 de sgariepy