C++ 関数テンプレートを学習しようとしています。関数テンプレートへのポインターとして配列を渡しています。その中で、配列のサイズを見つけようとしています。これが私が使用する関数テンプレートです。
template<typename T>
T* average( T *arr)
{
T *ansPtr,ans,sum = 0.0;
size_t sz = sizeof(arr)/sizeof(arr[0]);
cout<<"\nSz is "<<sz<<endl;
for(int i = 0;i < sz; i++)
{
sum = sum + arr[i];
}
ans = (sum/sz);
ansPtr = &ans;
return ansPtr;
}
このcout
ステートメントは、ポインターを整数の配列に渡している場合でも、のサイズarr
を表示します。これは、以前に言及した質問と重複している可能性があることはわかっていますが、これについてのより良い説明が必要です.1
5
私が思いついた唯一のことは、テンプレートは実行時に呼び出されsizeof
、コンパイル時の演算子であるため、コンパイラはその行を無視することです
int sz = sizeof(arr)/sizeof(arr[0]);
実際に関数を呼び出すまで、arr の正確なタイプがわからないためです。それは正しいですか、それともここで何かが欠けていますか? また、配列へのポインターを関数テンプレートに送信することは信頼できますか?