À QUOI ÇA SERT ?
Les attributs permettent d’ajouter des informations au compilateur sans changer directement la logique principale du programme.
Syntaxe :
Code: Select all
[[attribut]]
1. [[nodiscard]]
Code: Select all
[[nodiscard]]
int openFile();
Code: Select all
openFile();
Pourquoi ?
Parce que la valeur retournée est probablement importante.
Très utile pour :
- codes d’erreur ;
- handles ;
- résultats de validation.
2. [[maybe_unused]]
Code: Select all
[[maybe_unused]]
int debugValue{};
"Je sais que cette variable peut ne pas être utilisée."
Pratique avec du code conditionnel de debug.
3. [[noreturn]]
Code: Select all
[[noreturn]]
void fatal()
{
std::terminate();
}
Le compilateur peut optimiser le code autour de cette information.
4. [[deprecated]]
Code: Select all
[[deprecated("Utiliser newApi()")]]
void oldApi();
5. [[likely]] / [[unlikely]]
Code: Select all
if (success) [[likely]]
{
}
Ce n’est pas une garantie.
6. [[assume]]
Code: Select all
[[assume(size > 0)]];
Danger :
Si elle est fausse en réalité, le compilateur peut avoir optimisé en supposant qu’elle ne l’était jamais.
Il faut donc l’utiliser avec beaucoup de prudence.
À RETENIR
Les attributs expriment une intention :
- résultat à ne pas ignorer ;
- fonction qui ne retourne pas ;
- code obsolète ;
- branche probable ;
- hypothèse d’optimisation.
