在C++中隐式传递数组长度

在C++中隐式传递数组长度,c++,parameter-passing,C++,Parameter Passing,我曾经看到过一个源代码,它显然非常可靠,足以让我记住它,在函数中传递数组时,它似乎传达了数组的长度,请参见下面的示例: void foo(int [m][n] array) { //m and n are the rows and columns of the array //code } 然而,我无法找到那个来源,我开始怀疑我是否完全错了,甚至可能是想象出来的?有人愿意发表评论吗?前一行看起来像下面这样吗 template <size_t m, size_t n> 编译器将为使

我曾经看到过一个源代码,它显然非常可靠,足以让我记住它,在函数中传递数组时,它似乎传达了数组的长度,请参见下面的示例:

void foo(int [m][n] array)
{
//m and n are the rows and columns of the array
//code
}

然而,我无法找到那个来源,我开始怀疑我是否完全错了,甚至可能是想象出来的?有人愿意发表评论吗?

前一行看起来像下面这样吗

template <size_t m, size_t n>
编译器将为使用的每个数组大小创建一个唯一命名的函数版本。

如果通过引用接受数组,则可以使用模板从参数推断静态大小:

在C++中你可以做< /P>
void foo(int array[m][n])
只要m和n都是积分常数表达式。m将被忽略,而n将影响参数类型。以上相当于

void foo(int array[][n])
void foo(int (*array)[n])

这是否与您看到的相似-只有您自己知道。

尝试查看.template void fooint&array[M][N]@不,动态创建的数组的大小是不可扣除的,您只需手动调整即可。
void foo(int array[m][n])
void foo(int array[][n])
void foo(int (*array)[n])