我有以下粗略簽名的一段代碼:爲什麼我不能分配一個常量值,我該怎麼做呢?
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;
}
大多數編譯器會高興地吞下粒子陣列的分配,但扼流圈nElements的分配。這種不一致使我感到困惑,我想開悟。
我沒有問題,接受你不能分配一個常量整數,但爲什麼它的工作,因爲我期望的常量指針常量?
快速而廉價的解決方法是刪除const修飾符,但這可能會引入微妙的錯誤,因爲循環內的大部分代碼都是宏觀的(我曾經被咬過)。你將如何重組以上以允許持續的元素計數器?
我會接受這一點,因爲這是最簡潔的答案。 – Christoffer 2009-06-11 07:27:01