У меня есть кусок кода с помощью следующей грубой подписью:Почему я не могу назначить значение const, и что мне делать вместо этого?
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;
}
Большинство компиляторов счастливо поглотит назначение PArray, но дроссели на заданиях nElements. Эта непоследовательность меня смущает, и я хочу быть просветленным.
У меня нет проблем с принятием того, что вы не можете назначить целое число const, но почему это работает, как я ожидаю для const-pointer-to-const?
Быстрое и дешевое исправление заключается в том, чтобы отбросить спецификатор const, но это может привести к появлению тонких ошибок, поскольку большая часть кода внутри цикла является макроопределением (я был укушен этим однажды). Как бы вы реструктурировали вышеупомянутое, чтобы обеспечить постоянный счетчик элементов?
я принимаю это, так как это самый сжатый ответ. – Christoffer