首页 > 代码库 > [017]string类使用注意事项
[017]string类使用注意事项
最近自己写着玩,写了一个这样的函数:
void foo(const string& iStr) { for (int i = 0; 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 = 0; i < iStr.length(); ++i) { const char str = iStr.at(i); }}
这样就会没有问题了。
如果我们一定要使用string类型怎么办?可以这样来,利用string保存字符的原理
void foo(const string& iStr) { string str; for (int i = 0; i < iStr.length(); ++i) { str = iStr.at(i); }}
将对象实例和赋值分离开来,就不会出现这样的问题了。
[017]string类使用注意事项
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。