c++ - 如何在作为 arg 传递给某个函数的数组中使用结构化绑定(bind)?

标签 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] 时它不起作用?

最佳答案

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/

相关文章:

c++ - 从 C++ 中的实例化进程获取输出的可靠方法是什么?

c++ - 多线程 unif_rand() 的播种

c++ - 混合 void_t 和可变参数模板?

c++ - 可以在没有 RTTI 的情况下进行侧向转换吗?

c++ - Const 和引用成员函数限定符

c++ - 如果 constexpr 而不是标签分派(dispatch)

c++ - 你能切换一个 std::any.type() 吗?

组合类的c++复制构造函数

c++ - 运行 Brute Force 算法时出错?

c++ - 懒惰评估是否有效/可优化?