如何在以arg形式传递给某些函数的数组中使用结构化绑定?

Bru*_*uno 8 c++ c++17

我正在尝试将给函数的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;
}
Run Code Online (Sandbox Code Playgroud)

(&init)是什么意思?为什么使用时不起作用int init[2]

Sto*_*ica 8

int (&init)[2]是对两个整数数组的引用。int init[2]作为函数参数是C ++的C传统的遗留物。它没有将函数声明为采用数组。将参数的类型调整为int*,并且传递给函数的数组的所有大小信息都将丢失。

由于int init[2]实际采用了指针,因此可以使用任意大小的数组调用函数采用。它甚至可以通过nullptr。虽然函数int(&)[2]只能接受有效的两个数作为参数的数组。

由于在工作版本中init是指int[2]对象,因此结构化绑定可以与该数组对象一起使用。但是衰减的指针不能成为结构化绑定的对象,因为可用的静态类型信息仅提供对所指向的单个元素的访问。