Constantes statiques non intégrales dans les classes C : pourquoi pas ?
En C, les membres const statiques d'une classe ne peuvent pas être non intégraux genres. Ce comportement peut sembler déroutant, étant donné que le langage autorise les types intégraux comme int et unsigned.
La raison
La raison sous-jacente de cette restriction réside dans des considérations d'optimisation. Avec les types intégraux, le compilateur optimise souvent en insérant des valeurs constantes directement dans le code environnant. Cela élimine le besoin d'une adresse mémoire pour ces constantes, réduisant ainsi la surcharge des variables.
Cependant, pour les types non intégraux comme double, le compilateur ne peut pas toujours effectuer une telle inline. En effet, les opérations sur des types non intégraux peuvent nécessiter des calculs à virgule flottante, qui ne peuvent pas être facilement optimisés. De ce fait, le compilateur doit créer une adresse mémoire pour la constante et y accéder via une variable.
Exemple
Considérez le code suivant :
<code class="cpp">class No_Good { static double const d = 1.0; };</code>
Ici, le compilateur ne peut pas intégrer la constante d, car les valeurs doubles nécessitent des opérations à virgule flottante. Il doit donc créer une adresse mémoire pour d, ce qui est interdit par le standard C.
Solution
Pour éviter cette restriction, vous pouvez déclarer la constante comme une fonction plutôt qu’un membre statique. Par exemple :
<code class="cpp">class Now_Good { static double d() { return 1.0; } };</code>
Cela permet au compilateur d'intégrer la valeur de d lorsque cela est possible, tout en conservant la sémantique d'une constante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!