0

在我关于将数组作为 const 参数传递的问题之后,我试图弄清楚如何编写一个方法,其中参数是固定大小的 const 数组的 const 数组。唯一可写的就是这些数组的内容。

我正在考虑这样的事情:

template <size_t N>
void myMethod(int* const (&inTab)[N])
{
    inTab = 0;       // this won't compile
    inTab[0] = 0;    // this won't compile
    inTab[0][0] = 0; // this will compile
}

这个解决方案的唯一问题是我们不知道第一维。有人对此有解决方案吗?

提前致谢,

凯文

[编辑]

我不想使用 std::vector 或这种动态分配的数组。

4

2 回答 2

5

如果在编译时两个维度都是已知的,那么您可以使用二维数组(换句话说,数组数组)而不是指向数组的指针数组:

template <size_t N, size_t M>
void myMethod(int (&inTab)[N][M])
{
    inTab = 0;       // this won't compile
    inTab[0] = 0;    // this won't compile
    inTab[0][0] = 0; // this will compile
}

int stuff[3][42];
myMethod(stuff); // infers N=3, M=42

如果在运行时不知道任一维度,则可能需要动态分配数组。在这种情况下,请考虑使用std::vector两者来管理分配的内存并跟踪大小。

于 2012-07-24T09:40:51.777 回答
0

The reference prevents line 4 (inTab = 0;), because you've made inTab a reference. The const prevents line 5 (inTab[0] = 0;) because an inTab pointer is const.

于 2012-07-24T09:58:06.407 回答