C++ string 重载操作符
以前常用string与string或const char*类型之间进行+、或关系运算符运算,如
string str1;
string str2;
str1 + str2; str1 > str2;
str1 + "abc"等
今天突然看了下stl源码:basic_string的实现,发现实现里面仅仅重载了+=、[],
一下不知道str1 + str2 具体运行过程了,求解释
[解决办法]
有了 operator + 以后,你可以直接连加,例如:
string strinfo="Winter";
string strlast="Hello " + strinfo + "!";
//你还可以这样:
string strtest="Hello " + strinfo + " Welcome" + " to China" + " !";
看见其中的特点了吗?只要你的等式里面有一个 string 对象,你就可以一直连续"+",但有一点需要保证的是,在开始的两项中,必须有一项是 string 对象。其原理很简单:
系统遇到"+"号,发现有一项是string 对象。
系统把另一项转化为一个临时 string 对象。
执行 operator + 操作,返回新的临时string 对象。
如果又发现"+"号,继续第一步操作。
由于这个等式是由左到右开始检测执行,如果开始两项都是const char* ,程序自己并没有定义两个const char* 的加法,编译的时候肯定就有问题了。
你没找到+的重载吗?
[解决办法]
string的+和比较运算的重载在string头文件里而不是xstring头文件里,实现方法是建立一个临时string并对其用+=然后返回