最近自己写着玩,写了一个这样的函数:

void foo(const string& iStr) {
for (int i = ; i < iStr.length(); ++i) {
string str = iStr.at(i);
}
}

函数中间还涉及到的其他业务不管,问题在于,写了上面的代码过后,编译不过。

咋一看,这不是很正常么?取得iStr中的一个值,然后赋值给str就行了。

其实不然,因为平常我们用string用习惯了,就会习惯性的以为它是基本类型,可是,它是类类型啊!

于是,当我们采取下面的操作的时候:

string str = iStr.at(i);

iStr.at(i)返回一个const char类型的字符,于是在实例str的时候就会去找string中是否存在const char类型的拷贝构造函数。

结果,没找到,没办法复制对象,就出错了。

void foo(const string& iStr) {
for (int i = ; i < iStr.length(); ++i) {
const char str = iStr.at(i);
}
}

这样就会没有问题了。

如果我们一定要使用string类型怎么办?可以这样来,利用string保存字符的原理

void foo(const string& iStr) {
string str;
for (int i = ; i < iStr.length(); ++i) {
str = iStr.at(i);
}
}

将对象实例和赋值分离开来,就不会出现这样的问题了。

最新文章

  1. 打造android偷懒神器———RecyclerView的万能适配器
  2. Kafka使用入门教程
  3. Selenium 2.0 + Java 入门之环境搭建
  4. 访问者(Visitor)模式
  5. Oracle 恢复被删除的数据,解决误操作删除数据
  6. mysql事务,START TRANSACTION, COMMIT和ROLLBACK,SET AUTOCOMMIT语法
  7. Maven学习小结(二 项目构建过程)
  8. RMAN数据库恢复之丢失数据文件的恢复
  9. Oracle新建实例后,修改sys和system密码。
  10. 结构体的vector resize()与初始化
  11. MySQL优化 - 索引优化
  12. hdu 5002 (动态树lct)
  13. 睡眠麻痹 CSP HSP
  14. linux服务器查看tcp链接shell
  15. git 将主分支的提交合并到分支上(主分支同步到分支)
  16. 【代码笔记】iOS-UITableView上的button点击事件
  17. ESXi 6.5 总是会话超时
  18. python标准库介绍——29 zlib 模块详解
  19. 应对新型“蠕虫”式比特币勒索软件“wannacry”的紧急措施
  20. 常用的HTTP协议状态码

热门文章

  1. OK335xS can&#39;t reset with reboot
  2. C#.NET开源项目、机器学习、商务智能
  3. android中常用的弹出提示框
  4. Tourism Planning(HDU 4049状压dp)
  5. 《Python基础教程(第二版)》学习笔记 -&gt; 第三章 使用字符串
  6. ExtJs 5.0需要注意的问题
  7. C语言基础--结构体对齐,位域,联合体
  8. NOIP2005 篝火晚会
  9. SQL注入攻击及防范
  10. 【noip模拟】考试总结