范围内的指针const,以及非const外部

时间:2016-06-30 08:06:48

标签: c++ pointers const

我想知道如何在范围内有一个指针const,而在外面有非const。

我阅读了几个主题和网页,包括newbie question: c++ const to non-const conversionWhat's the point of const pointers? 我听到的消息是"如果你需要将const转换为非const,那就很危险了,你的代码可能设计得很差"。但是,我不确定如何克服这个问题:

我现在拥有的:

void compute(const CArray<FOO> &fooArray, CArray<double> &Results)
{
    Results[0] = 0.0 ;
    for(INT_PTR i=0 ; i<fooArray.GetCount()-1 ; ++i)
    {
        const FOO *foo1 = fooArray[i] ;
        DoSomething(foo1) ; //BOOL method which needs a const *FOO as parameter

        const FOO *foo2 = fooArray[i+1] ;
        DoSomething(foo2) ; //BOOL method which needs a const *FOO as parameter

        double res = 0.0 ;
        Compare(foo1, foo2, res) ; //Compare(const FOO *foo1, const FOO *foo2, double &result)
        Results[i+1] = res ;
    }
}

但是DoSomething是一个非常贪婪的功能,我想避免在同一个对象上调用它两次。所以我想做一些类似的事情:

void compute(const CArray<FOO> &fooArray, CArray<double> &Results)
{
    const FOO *foo1 = fooArray[0] ;
    Results[0] = 0.0 ;
    DoSomething(foo1) ; //BOOL method which needs a const *FOO as parameter
    for(INT_PTR i=1 ; i<fooArray.GetCount() ; ++i)
    {
        const FOO *foo2 = fooArray[i] ;
        DoSomething(foo2) ; //BOOL method which needs a const *FOO as parameter

        double res = 0.0 ;
        Compare(foo1, foo2, res) ; //Compare(const FOO *foo1, const FOO *foo2, double &result)
        Results[i] = res ;
        *foo1 = *foo2 ; //what i would like to do, but I can't since *foo1 and *foo2 are const
    }
}

我可以&#39;删除所有const,但正如我在阅读的主题中所提到的,他们有一个很好的理由:DoSomethingCompare不应该修改*foo1*foo2

1 个答案:

答案 0 :(得分:2)

  

我'可以'删除所有const

你的确可以,这将是你的“问题”的解决方案。虽然使foo1指向非const的指针就足够了。

  

DoSomething和Compare不应该修改* foo1和* foo2。

因此,他们应该通过值或const引用(或指向const的指针,如果由于某种原因这是有意义的)来获取它们的参数。在任何一种情况下,都可以将非const引用/对象(或指向非const的指针)传递给函数。

  

范围内的指针const,以及非常外的

你想要的是一个指针,在几个函数调用中是const,在函数外面是非const。这就像我描述的那样实现:使用const引用(或一个值,不需要是const)参数,并将非const变量传递给函数。