C++多维数组ForEach循环报错:不用auto如何使用实际类型?
解决C++范围for循环中数组类型的报错问题
直接解决方案:使用数组引用
把循环里的int e[2]改成数组引用类型int (&e)[2],代码即可正常编译运行:
#include <iostream> int main() { int x[][2]{{1, 2}, {3, 4}}; for (int (&e)[2] : x) { std::cout << e[0] << ' ' << e[1] << '\n'; } return 0; }
报错原因
C++中数组不支持直接拷贝初始化,原代码里int e[2] : x的写法,本质是试图把x中的每个int[2]数组拷贝给e,这违背了数组的语法特性,因此编译器抛出array must be initialized with a brace-enclosed initializer错误。而使用数组引用时,是直接绑定到原数组的元素,不会触发拷贝操作,完全符合语法要求。
其他可选方案
如果偏好标准库容器的使用方式,可以将原C风格数组转换为std::array,之后用std::array<int,2>&作为循环变量类型:
#include <iostream> #include <array> int main() { std::array<std::array<int,2>,2> x{{{1,2}, {3,4}}}; for (std::array<int,2>& e : x) { std::cout << e[0] << ' ' << e[1] << '\n'; } return 0; }
内容的提问来源于stack exchange,提问作者AK-CHP
相关产品推荐
相关产品推荐

