我正在尝试学习 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
as的大小。现在我知道这可能与我之前提到的问题重复,但我需要对此进行更好的解释。1
5
我唯一能想到的是,由于模板是在运行时调用的,并且sizeof
是一个编译时运算符,编译器只是忽略该行
int sz = sizeof(arr)/sizeof(arr[0]);
因为它在实际调用函数之前不知道 arr 的确切类型。这是正确的还是我在这里遗漏了什么?将指向数组的指针发送到函数模板是否可靠?