因为你不能将整个数组作为C中的函数参数传递.你实际上是在向它传递一个指针; 括号是句法糖.无法保证您指向的数组大小为8,因为您可以将此函数传递给您想要的任何字符指针.
// These all do the same thing void foo(char cvalue[8]) void foo(char cvalue[]) void foo(char *cvalue)
C和C++数组不是第一类对象; 你不能将数组传递给函数,它们总是衰减到指针.
但是,您可以传递指针和数组引用.这可以防止数组边界衰减.所以这是合法的:
templatevoid foo(const T(&arr)[N]) { int n = sizeof(arr); }