1. 算术表达式:
#include <iostream>
int
main() {
int
arr[4];
std::cout <<
sizeof
( arr ) /
sizeof
( arr[0] ) << std::endl;
// 输出4
}
|
或者
#include <iostream>
int
main() {
int
arr[4];
std::cout <<
sizeof
( arr ) /
sizeof
( *arr ) << std::endl;
// 输出4
}
|
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
}
|
3.标准C++模板库:
#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
}
|
#include <cstdlib>
#include <iostream>
int
main() {
int
arr[4];
std::cout << _countof( arr ) << std::endl;
// 输出4.
}
|
6. boost库:
#include "boost/range.hpp"
#include <iostream>
int
main(){
int
arr[4];
std::cout << boost::size( arr ) << std::endl;
// 输出4
}
|
上面的方法适用于静态数组,动态的数组(new[])是无法获取元素个数的。
上面的代码,自己可以编译运行看看,如果手上没有编译器测试上面的代码或者编译失败,可以在下面的页面上编译运行(最新版本的Visual C++):
http://webcompiler.cloudapp.net/
-
#include“string.h”
strlen(a)求字符数组的大小是
-
sizeof(a)/sizeof(a[0]);这种基本上万能