九州编程
1. 算术表达式:123456#include <iostream> int main() { int arr[4]; std::cout << sizeof( arr ) / sizeof( arr[0] ) << std::endl; // 输出4}或者123456#include <iostream> int main() { int arr[4]; std::cout << sizeof( arr ) / sizeof( *arr ) << std::endl; // 输出4}2. 函数模板参数自动推断:1234567891011#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++模板库:1234567#include <type_traits> // 注意包含此头文件.#include <iostream> int main() { int arr[4]; std::cout << std::extent<decltype( arr ), 0>::value << std::endl; // 输出4}4.模板特化与自动类型推断:1234567891011121314include <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}5. Visual C++编译器预定义宏:1234567#include <cstdlib>#include <iostream> int main() { int arr[4]; std::cout << _countof( arr ) << std::endl; // 输出4.}6. boost库:1234567#include "boost/range.hpp"#include <iostream> int main(){ int arr[4]; std::cout << boost::size( arr ) << std::endl; // 输出4}上面的方法适用于静态数组,动态的数组(new[])是无法获取元素个数的。上面的代码,自己可以编译运行看看,如果手上没有编译器测试上面的代码或者编译失败,可以在下面的页面上编译运行(最新版本的Visual C++):