Xavier Lamorlette

C++ : Attributs

Les attributs (attributes) sont des annotations dans le code qui ne changent pas sa sémantique, qui peuvent être utilisées par le compilateur à des fins d'optimisation, et qui peuvent servir de documentation.

Sommaire :

Attributs standard

deprecated

[[deprecated("bad performance)]] class A {};

likely / unlikely C++20

Indications pour le compilateur sur les chemins probables ou improbables :

if (condition) [[likely]] {
    …
}

nodiscard C++17

Le compilateur émet un avertissement si on ignore le retour d'une telle fonction. On peut aussi noter ainsi un type.

[[nodiscard]] int f() {}
[[nodiscard]] class A {};

Avec C++20, on peut ajouter une explication :

[[nodiscard("explanation")]] int f() {}

noreturn

[[noreturn]] void f() {}

Attributs GCC

Les compilateurs peuvent proposer leurs propres attributs (puisque ça ne change pas la sémantique). Cf liste des attributs pour les fonctions pour GCC.

Always_inline

Force une fonction à être inline. Cela semble plutôt inutile si l'on compile avec optimisation.

__attribute__((always_inline)) void foo();

Flatten

For a function marked with this attribute, every call inside this function will be inlined, if possible.

Optimize

The optimize attribute is used to specify that a function is to be compiled with different optimization options than specified on the command line. This can be used for instance to have frequently-executed functions compiled with more aggressive optimization options that produce faster but larger code.
void foo () __attribute__((optimize(3)));

Pure / Const

Une fonction pure n'a aucun effet autre que sa valeur de retour, et celle-ci ne dépend que des arguments et des variables globales. Such a function can be subject to common subexpression elimination and loop optimization just as an arithmetic operator would be.

Encore plus strict est l'attribut const : une telle fonction ne lit pas de donnée autre que ses arguments (pas de variable globale, et pas d'indirection depuis les arguments).

Hot

The hot attribute on a function is used to inform the compiler that the function is a hot spot of the compiled program. The function is optimized more aggressively and on many target it is placed into special subsection of the text section so all hot functions appears close together improving locality.

À l'inverse, on peut indiquer cold pour les fonctions peut susceptibles d'être exécutées.

La dernière mise à jour de cette page date d'août 2020.

Le contenu de ce site est, en tant qu'œuvre originale de l'esprit, protégé par le droit d'auteur.
Pour tout commentaire, vous pouvez m'écrire à xavier.lamorlette@gmail.com.