我有一段带有以下粗略签名的代码:
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 限定符,但这可能会引入细微的错误,因为循环内的大部分代码都是宏化的(我曾经被那个咬过)。您将如何重组上述内容以允许使用常量元素计数器?