我正在尝试将给函数的 2 个整数数组分解为 x, y
当使用 int init[2]
作为参数时,它不起作用。但是当我将它更改为 int (&init)[2]
时它会发生。
vector<vector<State>> Search(vector<vector<State>> board,
int init[2], int goal[2]) {
auto [x, y] = init;
}
这里的(&init)
是什么意思?为什么在使用 int init[2]
时它不起作用?
最佳答案
int (&init)[2]
是对两个整数数组的引用。 int init[2]
作为函数参数是 C++ 的 C 遗产的遗留物。它没有将函数声明为采用数组。参数的类型调整为 int*
并且传递给函数的数组的所有大小信息都将丢失。
考虑到实际采用指针,可以使用任意大小的数组调用采用 int init[2]
的函数。它甚至可以传递 nullptr
。虽然一个采用 int(&)[2]
的函数只能被赋予一个有效的两个数组作为参数。
由于在工作版本中 init
引用了一个 int[2]
对象,因此结构化绑定(bind)可以与该数组对象一起使用。但是衰减的指针不能成为结构化绑定(bind)的主题,因为可用的静态类型信息只能访问指向的单个元素。
关于c++ - 如何在作为 arg 传递给某个函数的数组中使用结构化绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56092567/