À QUOI ÇA SERT ?
Les enum servent à donner des noms compréhensibles à des valeurs.
Les struct servent à regrouper plusieurs données appartenant au même objet logique.
1. POURQUOI UTILISER UNE ENUM
Sans enum :
Code: Select all
int state = 2;
Impossible à savoir sans documentation.
Avec :
Code: Select all
enum class State
{
Stopped,
Running,
Failed
};
Code: Select all
State state{State::Running};
2. enum class
Exemple :
Code: Select all
enum class ProcessState
{
Created,
Running,
Waiting,
Terminated
};
Code: Select all
ProcessState::Running
Parce qu’il évite la pollution de la portée et les conversions implicites dangereuses.
3. TYPE SOUS-JACENT
Code: Select all
enum class Opcode : std::uint8_t
{
Read = 1,
Write = 2,
Close = 3
};
Parce qu’on veut que la représentation utilise exactement un octet.
Très utile dans :
- protocoles réseau ;
- fichiers binaires ;
- commandes matérielles.
4. STRUCT
Code: Select all
struct ProcessInfo
{
std::uint32_t pid;
std::uint64_t memory;
bool running;
};
Parce que ces trois données décrivent le même objet logique : un processus.
Sans structure :
Code: Select all
uint32_t pid;
uint64_t memory;
bool running;
5. INITIALISATION
Code: Select all
ProcessInfo p{
1234,
4096,
true
};
Code: Select all
ProcessInfo p{
.pid = 1234,
.memory = 4096,
.running = true
};
6. PADDING
Très important en bas niveau.
Code: Select all
struct Example
{
char c;
int i;
};
1 octet + 4 octets = 5 octets.
Mais sizeof(Example) peut être 8.
Pourquoi ?
Le compilateur ajoute du padding pour respecter l’alignement de int.
Représentation possible :
Code: Select all
offset 0 : char c
offset 1 : padding
offset 2 : padding
offset 3 : padding
offset 4 : int i
offset 5
offset 6
offset 7
- structures de drivers ;
- formats binaires ;
- réseau ;
- mémoire partagée ;
- ABI.
7. struct ET class
En C++, elles sont presque identiques.
Différence par défaut :
struct :
membres publics.
class :
membres privés.
Donc ceci est valide :
Code: Select all
struct Counter
{
void increment()
{
++value;
}
int value{};
};
À RETENIR
enum = donner un nom à des états ou codes.
struct = regrouper des données liées.
Pour le système, pense aussi :
- type sous-jacent ;
- padding ;
- alignement ;
- taille réelle en mémoire.
