0

定数として渡される配列と定数である配列値の違いは何ですか?

すべての値が定数の場合にポインターの配列を関数に渡す場合:

`void display(Fraction* const ar[], int size);`

すべて正常に動作しますが、配列が定数の場合

`void display(const  Fraction* ar[], int size);` 

関数を呼び出すと、コンパイラは次のエラーを返します。

`error C2664: 'display' : cannot convert parameter 1 from 'Fraction *[3]' to 'const Fraction *[]'`

主要:

int main()
{
    Fraction* fArray[3];
    Fraction* fOne = new Fraction();
    Fraction* fTwo = new Fraction();
    Fraction* fThree = new Fraction();
    fOne->num = 8;
    fOne->den = 9;
    fTwo->num = 3;
    fTwo->den = 2;
    fThree->num = 1;
    fThree->den = 3;
    fArray[0] = fOne;
    fArray[1] = fTwo;
    fArray[2] = fThree;
    display(fArray, 3);

    system("pause");
    return 0;
}
4

1 に答える 1

3

これはよくある質問です。

const T* a[]つまりT const* a[]、宣言したのは配列自体ではないことに注意してくださいconst。代わりに、アイテムへのポインタの配列を宣言していconstます。

基本的に、言語が暗黙的な変換T**T const**を提供する場合、最初に宣言されたものを不注意に変更しようとする可能性がありますconst

int const     v = 666;
int*          p;
int**         pp = &p;
int const**   ppHack = pp;    //! Happily not allowed!

*ppHack = &v;    // Now p points to the const v...
于 2012-11-21T18:55:59.957 に答える