cpp中auto, auto &和const auto &的区别

笔者初学cpp,如有纰漏,请见谅并指正。

用在哪

auto用于推断类型,具体可用于声明变量时根据初始化表达式自动推断该变量的类型,也就是可用在for循环。

也可以用于声明函数返回值的占位符。

怎么用

这里主要讲for循环中三者的区别

直接说结论

auto

auto用于copy一份集合中的数据,对于这种情况,在循环体中不论怎么修改copy的数据,是不会影响到原有集合中的数据的。

举个简单的例子

int arr[5] = {0, 1, 2, 3, 4};
cout << "使用auto" << endl;
for (auto a: arr) {
    a += 1;
    cout << a << "\t";
}
cout << endl;

cout << "原数组" << endl;
for (int i = 0; i < 5; i++) {
    cout << arr[i] << "\t";
}
cout << endl;

结果可以看到,原数组没有发生改变

使用auto
1       2       3       4       5
原数组
0       1       2       3       4

auto &

auto &相当于获取一份集合中数据的引用,那么对于数据的修改,就会直接影响到集合数据本身。

同样简单的例子

int arr[5] = {0, 1, 2, 3, 4};
cout << "使用auto &" << endl;
for (auto &a: arr) {
    a += 1;
    cout << a << "\t";
}
cout << endl;

cout << "原数组" << endl;
for (int i = 0; i < 5; i++) {
    cout << arr[i] << "\t";
}
cout << endl;

结果

使用auto &
1       2       3       4       5
原数组
1       2       3       4       5

const auto &

在auto &的前面加上了const修饰,意味着它会获取一份集合中数据的引用,但是只可以被读取,不能被修改。

例子

int arr[5] = {0, 1, 2, 3, 4};
cout << "使用const auto &" << endl;
for (const auto &a: arr) {
    a += 1; // // error 不能修改
    cout << a << "\t";
}

a += 1会直接报错

题外话,无论哪种方式,都不可以在集合的循环体中给集合增删元素,否则会报错。

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值