J'ai un morceau de code avec la signature approximative suivante:Pourquoi ne puis-je pas attribuer une valeur const et que faire à la place?
void evaluate(object * this)
{
static const int briefList[] = { CONSTANT_A, CONSTANT_Z };
static const int fullList[] = { CONSTANT_A, CONSTANT_B, ..., CONSTANT_Z};
const int const * pArray;
const int nElements;
int i;
if (this->needDeepsEvaluation)
{
pArray = fullList;
nElements = sizeof(fullList)/sizeof(fullList[0]);
}
else
{
pArray = briefList;
nElements = sizeof(briefList)/sizeof(briefList[0]);
}
for (i = nElements; i; i--)
{
/* A thousand lines of optimized code */
}
this->needsDeepEvaluation = 0;
}
La plupart des compilateurs se fera un plaisir d'avaler la cession de parray, mais selfs sur les missions de Nelements. Cette incohérence me trouble et j'aimerais être éclairée.
Je n'ai aucun problème à accepter que vous ne pouvez pas affecter un entier de const, mais pourquoi cela fonctionne-t-il comme prévu pour le const-pointer-to-const? Le correctif rapide et bon marché consiste à supprimer le qualificateur de const, mais cela pourrait introduire des bugs subtils car une grande partie du code à l'intérieur de la boucle est macrofiée (j'ai été mordu par cette fois). Comment restructureriez-vous ce qui précède pour permettre un compteur d'éléments constants?
Je vais accepter cela car il est la réponse la plus succincte. – Christoffer