2

次の関数があるとします。

template<class T>
void foo(T* ar)
{
    std::cout << sizeof(ar) / sizeof(ar[0]) << std::endl;
    for (int i = 0; i < 6; i++)
        std::cout << ar[i] << " ";
}

そして次の配列:

int ar[] = { 5, 1, 6, 8, 9, 3 };
foo(ar);

プログラムが「6」を出力し、次に配列の内容を出力することを期待していました。しかし、何らかの理由でsizeof(ar) / sizeof(ar[0])1 に評価されますが ( と の両方が '4'sizeof(ar)sizeof(ar[0])評価されるため)、出力は正常に機能します (渡された配列には 6 つの要素すべてが含まれていることを意味します)。

これは、関数に渡された配列でのみ発生します (配列が宣言されている main() で長さを評価しようとしましたが、正常に機能しました)。関数内の配列の長さを取得するにはどうすればよいですか?

4

1 に答える 1