概述
1. 算术表达式:
#include <iostream>
int main() {
int arr[4];
std::cout << sizeof( arr ) / sizeof( arr[0] ) << std::endl; // 输出4
}
注:数组形参和指针形参的方式传递数组,会有指针降级,即不能在自定义内部通过sizeof( arr ) / sizeof( arr[0] )
的方式获取数组元素个数
2. 函数模板参数自动推断:
#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。
调用的时候,只需传递 数组名即可。
这里其实这样写,得到的结果也一样。
#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] )
的形式。
#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
}
编译报错:
[Error] no matching function for call to 'Count(int&)'
另一种方式不加N,直接模板参数传递引用的方式也可以:
#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>
#include <type_traits>
#include <iostream>
int main() {
int arr[4];
std::cout << std::extent<decltype( arr ), 0>::value << std::endl; // 输出4
}
4.模板特化与自动类型推断:
#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++中获取数组的长度所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复