次の関数があるとします。
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() で長さを評価しようとしましたが、正常に機能しました)。関数内の配列の長さを取得するにはどうすればよいですか?