gpt4 book ai didi

c++ - 为什么编译器不能在通过引用传递二维数组的情况下计算数组的大小

转载 作者:太空狗 更新时间:2023-10-29 20:24:46 25 4
gpt4 key购买 nike

只是想知道 - 我写了以下函数

template <class T, size_t N>
T* asFlatArray (T arr[][N])
{
// some code
}

并称它为

asFlatArray(myArray); // where myArray is int myArray[some_size][sime_size];

编译运行没有错误。但是,如果我将“arr”更改为引用

template <class T, size_t N>
T* asFlatArray (T (&arr)[][N])
{
// some code
}

我会有错误:

parameter ‘arr’ includes reference to array of unknown bound ‘T [][N]’

我知道怎么解决

template <class T, size_t Rows, size_t Columns>
T* asFlatArray (T (&arr)[Rows][Columns])

但我不明白为什么会这样?

最佳答案

根本问题是第一个函数模板等同于

template <class T, size_t N>
T* asFlatArray (T (*arr)[N]) {}

所以没有维度可以计算。它将匹配一个指向数组的指针,或者任何可以衰减为指向数组的指针的东西。因此也可以匹配二维数组。

至于第二个例子,指向T[][N]类型的引用或指针不能作为函数参数,这会导致编译器错误。当然,您可以为缺少的维度添加一个额外的模板参数:

template <class T, size_t N, size_t M>
T* asFlatArray(T (&arr)[N][M]) {}

关于c++ - 为什么编译器不能在通过引用传递二维数组的情况下计算数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26328077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com