当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能分配一个const值,我应该怎么做呢?

如何解决《为什么我不能分配一个const值,我应该怎么做呢?》经验,为你挑选了2个好方法。

我有一段带有以下粗略签名的代码:

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限定符,但这可能会引入微妙的错误,因为循环中的大部分代码都是宏命令的(我曾经被它咬过一次).您将如何重构上述内容以允许一个恒定的元素计数器?



1> Jamie..:

正如米歇尔所指出的,你的声明:

const int const * pArray;

不太正确.

你有四(4)种合成选择:

int * pArray;        /* The pointer and the dereferenced data are modifiable */
int * const pArray;  /* The pointer is constant (it should be initialized),
                        the dereferenced data is modifiable */
int const * pArray;  /* the pointer is modifiable, the dereferenced data 
                        is constant */
int const * const pArray; /* Everything is constant */



2> Michiel Budd..:

在你的宣言中 pArray

const int const * pArray;

两个'const'关键字实际上都适用于int.要使一个应用于指针,您必须将其声明为int const * const pArray,其中指针本身变为不可变.然后,您的编译器应该在两个赋值上抛出错误.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有