Rec*_*ker -1 c++ templates sizeof
我正在尝试学习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;
}
Run Code Online (Sandbox Code Playgroud)
即使我将指针传递给整数数组,该cout语句也会显示arras 的大小.现在我知道这可能是我之前提到的问题的可能重复,但我需要对此有更好的解释.15
我唯一能想到的是,因为模板是在运行时调用的,并且sizeof是一个编译时运算符,所以编译器只是忽略了这一行
int sz = sizeof(arr)/sizeof(arr[0]);
Run Code Online (Sandbox Code Playgroud)
因为在实际调用函数之前它不知道arr的确切类型.这是正确的还是我错过了这里的东西?将指针发送到函数模板也是可靠的吗?
T *arr
Run Code Online (Sandbox Code Playgroud)
这是C++的" arr 是一个指针T".sizeof(arr)显然,这意味着"指针的大小arr",而不是"数组的大小arr".这是该计划中的关键缺陷.
为了获得数组的大小,该函数需要在数组上运行,显然不是在指针上运行.众所周知(对吧?)数组不是指针.
此外,平均函数应返回平均值.但这T*是一个"指针T".平均函数不应返回指向值的指针.这不是一个价值.
具有指针返回类型不是最后一次攻击:返回指向局部变量的指针是最糟糕的.你为什么要偷酒店房间钥匙?
template<typename T, std::size_t sz>
T average( T(&arr)[sz])
{
T ans,sum = 0.0;
cout<<"\nSz is "<<sz<<endl;
for(int i = 0;i < sz; i++)
{
sum = sum + arr[i];
}
ans = (sum/sz);
return ans;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |