我有以下粗略签名的一段代码:为什么我不能分配一个常量值,我该怎么做呢?
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