c++ - 范围内的指针 const,外部非 const

标签 c++ pointers constants

我想知道如何在作用域内有一个指针 const,而在外部有一个非 const。

我阅读了几个主题和网页,包括 newbie question: c++ const to non-const conversionWhat's the point of const pointers? 我听到的消息是“如果您需要将 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
    }
}

我“可以”删除所有常量,但正如我阅读的主题中提到的那样,它们出现在这里是有充分理由的:DoSomethingCompare 不应该修改*foo1*foo2

最佳答案

I 'could' remove all the const

你确实可以,这将是你“问题”的解决方案。尽管使 foo1 成为指向非常量的指针就足够了。

DoSomething and Compare are not supposed to modify *foo1 and *foo2.

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

pointer const inside a scope, and non const outside

您想要的是一个指针,该指针在几个函数调用内是const,而在函数外是非常量。这可以简单地按照我的描述实现:使用一个常量引用(或一个值,不需要是常量)参数,并将您的非常量变量传递给函数。

关于c++ - 范围内的指针 const,外部非 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117351/

相关文章:

c++ - 为什么一个方法会对同一个变量有 const 和非 const 参数?

c++ - 循环遍历 vector 时将对象添加到 vector

c++ - 将返回的迭代器转换为 const

c - 如何动态改变char指针大小?

c - C指针的 "**&ptr"和 "2**ptr"是什么意思?

c++ - Lambda:为什么按值捕获的值是常量,但按引用捕获的值不是?

c++ - mmap() 两次返回相同的指针

c# - 从 C# 调用非托管 .dll 的性能

c - 字符数组和字符串指针有什么区别?

c - 从指向 const 的指针中删除 const 是否遵循 C 中的严格别名,并引用同一个对象?