template <typename list_type>
int len(list_type list) {
std::cout << sizeof(list);
return (sizeof(list) / sizeof(list[1]));
}
int main() {
int list[5] = {1, 2 ,3 ,5 ,4};
std::cout << sizeof(list) << "\n";
len(list);
}
当我运行程序时,我得到:20
然后4
。虽然它是相同的列表,为什么会有区别?
答案 0 :(得分:1)
数组衰减为指针。
list
是int*
中的len()
和int[5]
中的main
。
作为mentioned here,有两种可能的解决方法:
如果您使用引用,那么它将起作用(指针不会衰减),但您仍然需要计算元素的数量:
#include <iostream>
template <typename list_type>
int len(list_type &list) {
std::cout << sizeof(list) << '\n';
return (sizeof(list) / sizeof(list[1]));
}
int main() {
int list[5] = {1, 2 ,3 ,5 ,4};
std::cout << sizeof(list) << "\n";
auto element_count = len(list);
std::cout << "There are " << element_count << " elements in the list.\n";
}
对于第二个选项,您将在编译时获得数组的大小:
#include <iostream>
template <typename list_type, size_t N>
int len(list_type (&list) [N]) {
std::cout << sizeof(list) << '\n';
return N;
}
int main() {
int list[5] = {1, 2 ,3 ,5 ,4};
std::cout << sizeof(list) << "\n";
auto element_count = len(list);
std::cout << "There are " << element_count << " elements in the list.\n";
}