【问题标题】:pointer const inside a scope, and non const outside范围内的指针 const 和外部的非 const
【发布时间】:2016-06-30 08:06:48
【问题描述】:

我想知道如何在范围内有一个指针 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
    }
}

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

【问题讨论】:

  • 制作一个返回 const ptr,但内部使用非 const ptr 的函数?
  • 您可以将非常量参数传递给采用 const 参数的函数。当函数签名具有 const 参数时,这意味着它承诺不会修改它们。这对于可修改的参数来说不是问题。
  • @kamikaze 嗯,这很尴尬.. 我想有时我只需要重新审视我的代码。 Ty 把我带回地球。

标签: c++ pointers constants


【解决方案1】:

我“可以”删除所有的常量

您确实可以,这将是您的“问题”的解决方案。虽然将 foo1 设为非常量的指针就足够了。

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

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

在作用域内指针 const,在外指针非 const

你想要的是一个指针,它在几个函数调用内是const,在函数外是非常量。正如我所描述的那样,这很简单:使用一个 const 引用(或一个值,不需要是 const)参数,并将您的非 const 变量传递给函数。

【讨论】:

  • 确实你是对的,我只需要指针在函数调用内部为 const 而在外部为非 const。也许我应该编辑标题?反正你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多