C++ string使用for改变为何必须使用引用

例子1:

#include <iostream>
#include <cctype>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main(){

    string s("assss,ddd,eeee");
    decltype(s.size()) punct_cnt = 0;
    for(auto c : s){
        if(ispunct(c)){
            ++punct_cnt;
        }
    }
    cout << punct_cnt << endl;
}

一个普通的遍历字符串,输出标点符号值为2

例子2:
当改变std::string 中的值
错误代码:

#include <iostream>
#include <cctype>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main(){

    string s("assss,ddd,eeee");
    decltype(s.size()) punct_cnt = 0;
    for(auto c : s){
        c = toupper(c);
    }
    cout << s << endl;
}

输出assss,ddd,eeee
正确代码:

#include <iostream>
#include <cctype>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main(){

    string s("assss,ddd,eeee");
    decltype(s.size()) punct_cnt = 0;
    for(auto &c : s){
        c = toupper(c);
    }
    cout << s << endl;
}

输出ASSSS,DDD,EEEE
结论:如果要改变string中对象的字符的值,必须把循环变量定义成引用类型,如果是直接=,只是对原先对象的拷贝(即值的传递)。而想要去改变原始值,就要去获得其原始对象,所以使用引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值