sha*_*oth 11
template<size_t Size>
void AcceptsArray( ParameterType( &Array )[Size] )
{
//use Size to find the number of elements
}
Run Code Online (Sandbox Code Playgroud)
它被称为这样:
ParameterType array[100];
AcceptsArray( array ); //Size will be auto-deduced by compiler and become 100
Run Code Online (Sandbox Code Playgroud)
唯一的缺点是你现在有一个模板化的功能,并增加代码膨胀.这可以通过将调用重定向到接受第一个元素的地址和元素数量的非模板化函数来解决.
这是(一个)数组和指针之间的区别.获取数组的大小会导致其大小以字节为单位,而获取指针的大小会产生该系统上指针的大小.但是,无论何时将数组传递给函数,它都会衰减到一个指针,无论指针的类型是什么类型(32位机器上的指针),指针的大小始终相同.
从技术上讲,将数组传递给函数是不可能的,因为无论何时尝试,它都会变成指针.
您还需要将数组的大小传递给函数,或者更好,如果可以的话,使用std::vector或者std::array,或者std::string如果您将数组用作C风格的字符串.