c++ - 在 foreach 循环中将变量声明为 i vs &i
问题描述
为什么这些循环给出相同的输出:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> ar = {2, 3 ,4};
for(auto i: ar) //this line changes in the next loop
cout<<i<<" ";
cout<<"\n";
for(auto &i: ar) //i changed to &i
cout<<i<<" ";
}
它们都给出相同的输出:
2 3 4
2 3 4
在声明 foreach 循环变量时,不应添加 & 使变量获取数组中值的引用,并打印 i 使其打印引用。这里发生了什么?
通过打印参考我的意思是这样的代码打印:
for(auto i: ar)
cout<<&i<<" ";
输出:
0x61fdbc 0x61fdbc 0x61fdb
解决方案
结果是相同的,因为在第一个循环中,您将变量的值复制到一个新变量中i
并打印它的值。(分配了额外的 RAM)
在第二个循环中,您通过将其地址分配给 来访问内存中当前元素的值i
。(没有分配额外的 RAM)
另一方面:
cout<<&i<<" ";
导致打印 的地址i
。
推荐阅读
- c++ - 非类型模板参数
- elasticsearch - 无法启动auditbeat
- swift - SwiftUI 中等效的推送、弹出视图控制器
- c++ - 如何在 C++ 中生成随机数?
- mysql - 如何将多个视图变成 1 个视图 mysql
- mysql - MySQL | PARTITION BY Clause - 不适用于 XAMP
- azure-active-directory - 如何使用 PowerShell 创建/生成不记名令牌?
- python - 向没有 LoginRequiredMixin / django 的未登录用户显示登录页面
- module - 如何在 Odoo 13 Enterprise 中显示更多的 Employee 字段?
- python - Plotly Express 条形图竞赛未按预期工作