2

g ++は、配列を引数として渡すときに配列サイズの違いを無視しているようです。つまり、以下は。を使用しても警告なしでコンパイルされます-Wall

void getarray(int a[500])
{
    a[0] = 1;
}

int main()
{
    int aaa[100];
    getarray(aaa);
}

これで、ポインターを渡す基本的なモデルを理解しました。明らかに、関数をとして定義することができますgetarray(int *a)。ただし、配列サイズを明示的に指定した場合、gccは少なくとも警告を発行することを期待していました。

この制限を回避する方法はありますか?(私はゲストブースト::配列は1つの解決策ですが、C ++に昇格したcスタイルの配列を使用した古いコードがたくさんあります...)

4

2 に答える 2

10

配列は、最初の引数へのポインターとして渡されます。サイズが重要な場合は、関数を次のように宣言する必要があります。void getarray(int (&a)[500]);

C のイディオムは、次のように配列のサイズを渡すことです。 void getarray(int a[], int size);
C++ のイディオムは、std::vector (または最近では std::tr1::array) を使用することです。

于 2009-09-03T08:45:51.800 に答える
3

私はRPGが言ったことに二番目です。ただし、任意のサイズの配列で関数を呼び出したい場合は、テンプレートを使用してそれを行うことができます。

template< std::size_t N>
void getarray(int (&a)[N])
于 2009-09-03T08:53:02.393 に答える