1. 算术表达式:
复制代码
1
2
3
4
5
6
7#include <iostream> int main() { int arr[4]; std::cout << sizeof( arr ) / sizeof( arr[0] ) << std::endl; // 输出4 }
注:数组形参和指针形参的方式传递数组,会有指针降级,即不能在自定义内部通过sizeof( arr ) / sizeof( arr[0] )
的方式获取数组元素个数
2. 函数模板参数自动推断:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12#include <iostream> template <typename T, size_t N> inline size_t Count( T ( & arr )[N] ) { return N; } int main() { int arr[4]; std::cout << Count( arr ) << std::endl; // 输出4 }
传递数组的引用的方式,并且传入大小参数N。
调用的时候,只需传递 数组名即可。
这里其实这样写,得到的结果也一样。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12#include <iostream> template <typename T, size_t N> inline size_t Count( T ( & arr )[N] ) { return sizeof(arr)/sizeof(arr[0]); } int main() { int arr[4]; std::cout << Count( arr ) << std::endl; // 输出4 }
验证一下,调用时是否能传递大小参数。Count( arr[3] )
的形式。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12#include <iostream> template <typename T, size_t N> inline size_t Count( T ( & arr )[N] ) { return sizeof(arr)/sizeof(arr[0]); } int main() { int arr[4]; std::cout << Count( arr[3] ) << std::endl; // 输出4 }
编译报错:
复制代码
1
2[Error] no matching function for call to 'Count(int&)'
另一种方式不加N,直接模板参数传递引用的方式也可以:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#include <iostream> template <typename T, size_t N> size_t Count( T ( & arr )[N] ) { return sizeof(arr)/sizeof(arr[0]); } template <typename T> size_t getArrayLen(T& array){ return (sizeof(array) / sizeof(array[0])); } int main() { int arr[4]; std::cout << Count( arr ) << std::endl; // 输出4 std::cout << getArrayLen( arr ) << std::endl; // 输出 4 }
3.标准C++模板库:
包含此头文件<type_traits>
复制代码
1
2
3
4
5
6
7
8#include <type_traits> #include <iostream> int main() { int arr[4]; std::cout << std::extent<decltype( arr ), 0>::value << std::endl; // 输出4 }
4.模板特化与自动类型推断:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <iostream> template <typename T> class ComputeSize; template <typename T, size_t N> class ComputeSize<T[N]> { public: static const size_t value = N; }; int main() { int arr[4]; std::cout << ComputeSize<decltype( arr )>::value << std::endl; // 输出4 }
最后
以上就是自然萝莉最近收集整理的关于C++中获取数组的长度的全部内容,更多相关C++中获取数组内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复