string 构造函数,=,整数 赋值给 string 引起的 坑
对string 理解构造和赋值理解不清引起的错误。
起因:
string a;
int i=1;
a=i;//不报错,不警告
int c=330;//大于256
a=c;//不警告,不报错
a=330;//warning: overflow in implicit constant conversion
string str=3;//error: invalid conversion from 'int' to 'const char*'
string str(3);//error: invalid conversion from 'int' to 'const char*'
上述 的解释
赋值 = 和构造函数的区别
string a=3; 调用的 是 构造函数
a=3; 调用的 是= 操作符
查看 string 官方文档
http://www.cplusplus.com/reference/string/string/string/
构造函数:
string();
string(conststring&str);
string(conststring&str,size_tpos,size_tlen=npos);
string(constchar*s);
string(constchar*s,size_tn);
string(size_tn,charc);
template<classInputIterator>string(InputIteratorfirst,InputIteratorlast);
赋值 =:
string (1)
string&operator=(conststring&str);
c-string (2)
string&operator=(constchar*s);
character (3)
string& operator= (char c);
看到 “=” 分为两种情况:
= operator
copy constructor
如果新定义一个对象,一定会调用构造函数/拷贝构造,不会调=操作,
举例 string a="fdjhf", a 是定义,会调用其构造函数
没有新对象定义
string a,b;a=b; 这里调用 = 操作符
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。