【发布时间】:2014-08-01 19:41:15
【问题描述】:
作为使用模板的一些练习,我尝试编写一个函数模板来查找数组的大小:
template <typename T>
size_t arraySize(T array[]) {
return (sizeof(array)/sizeof(T));
}
然后我尝试使用一些不同数据类型的数组以及常规 sizeof(array)/sizeof(datatype) 计算来测试模板,如下所示:
int main(){
int arr1[20];
char arr2[20];
double arr3[20];
cout << arraySize(arr1) << ' ' << arraySize(arr2) << ' ' << arraySize(arr3) << endl;
cout << sizeof(arr1)/sizeof(int) << ' ' << sizeof(arr2)/sizeof(char) << ' ' << sizeof(arr3)/sizeof(double);
}
输出是
2 8 1
20 20 20
为什么这个模板不能按预期工作?
注意:我知道 Stack Overflow (such as this one) 上存在与模板数组大小相关的其他问题,但我主要对为什么这个特定代码不起作用感到困惑。
【问题讨论】:
-
@Koopa184 我想保留
c++1y标签,因为有一个待定的标准提案要将此函数添加到标准库。这让未来的读者更容易阅读。 -
@TemplateRex 对不起,我误会了!没关系。
标签: c++ arrays templates size c++14