我正在尝试将给函数的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]
时它不起作用?
答案 0 :(得分:8)
int (&init)[2]
是对两个整数数组的引用。 int init[2]
作为函数参数是C ++的C传统遗留下来的。它没有将函数声明为采用数组。参数的类型已调整为int*
,并且传递给函数的数组的所有大小信息都将丢失。
采用int init[2]
的函数可以调用任何大小的数组,因为实际上采用了指针。它甚至可以通过nullptr
传递。使用int(&)[2]
的函数只能被指定为有效的2数组作为参数。
由于在工作版本init
中引用了int[2]
对象,因此结构化绑定可以与该数组对象一起使用。但是,衰减的指针不能成为结构化绑定的对象,因为可用的静态类型信息只能访问所指向的单个元素。