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

时间:2019-05-11 17:10:24

标签: 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;
}

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

1 个答案:

答案 0 :(得分:8)

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

采用int init[2]的函数可以调用任何大小的数组,因为实际上采用了指针。它甚至可以通过nullptr传递。使用int(&)[2]的函数只能被指定为有效的2数组作为参数。

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