You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++多维数组遍历中为何使用引用(&)?求详细解析

关于C++多维数组遍历中引用的解析

先明确你的代码里mat1的类型是std::array<std::array<int, 3>, 3>——本质是一个外层数组,每个元素又是一个存放int的内层数组。下面逐个解析两个引用的作用:

1. auto& row的原理与作用

  • 范围for循环遍历mat1时,每次迭代的目标是mat1里的一行(也就是std::array<int,3>类型的对象)。
  • 如果不用引用,写成auto row,那么每次循环都会把原数组里的整行数据拷贝到临时变量row中。对于小型数组来说拷贝开销不明显,但数组尺寸变大时,会浪费内存和CPU资源,效率骤降。
  • 使用auto& row时,row是原数组对应行的引用(相当于给原行起了一个别名),操作row就是直接操作mat1里的原数据,完全没有拷贝开销。同时auto会自动推导出row的实际类型是std::array<int, 3>&,无需手动写冗长的类型名。

2. int& elements的原理与作用

  • 遍历row(也就是内层的std::array<int,3>)时,每次迭代的目标是该行里的int元素。
  • 如果不用引用,写成int elements,elements只是原元素的拷贝。此时执行cin >> elements只会修改这个临时拷贝的值,原数组mat1里的元素根本不会被修改——这直接违背了“输入数据到数组”的需求。
  • 使用int& elements时,elements是原数组对应int元素的引用,cin >> elements会直接修改mat1里的原始数据,这才符合代码的预期逻辑。
  • 后面输出的循环里同样用了int& elements,虽然输出时不需要修改元素,但用引用依然能避免拷贝,提升效率。更规范的写法是const int& elements(明确表示只读),不过int&也能正常工作。

补充说明

如果只是读取数组内容(比如输出循环),可以把引用改成const auto& row和const int& elements,这样既能避免拷贝,又能防止误修改原数据,代码安全性更高。

内容的提问来源于stack exchange,提问作者Zoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:01:42