スコープの中にポインタconstを持ち、外側にconst以外のポインタを持つことができますか?スコープ内のポインタconst、非const外
私はnewbie question: c++ const to non-const conversionとWhat's the point of const pointers? を含むいくつかのトピックやWebページを読んで、私が聞いたメッセージは、「あなたは非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
}
}
私はすべてのconstを削除「でした」しかし、私は読んで話題にmentionnedとして、彼らはここにいる正当な理由がある:DoSomething
とCompare
ではありません*foo1
と*foo2
を変更する予定です。
const ptrを返す関数を作成しますが、insideは非const ptrを使用しますか? – lorro
const以外の引数をconst引数をとる関数に渡すことができます。関数シグネチャにconst引数がある場合、関数シグネチャを変更しないことを約束します。これは変更可能な引数については問題ではありません。 – kamikaze
@kamikazeまあ、それは恥ずかしいです。私はときどき私のコードを見直す必要があると思います。私を地球に戻すためのタイ。 – Benoit