求助!字符串相加和字符串加字符,效果不一样吗?

本人在刷leetcode 22题的时候遇到了这样一个问题
string s;
s+="("和s+'('理论上一个是一样的,似乎是+运算符进行了重载,char类型数据被转化为了string 数据,但在实际运行的时候却出现了问题。
在深度优先搜索算法进行递归时,s+="("一直多一个左括号。

在第一次递归结束后,leftnum是1,s是((,但采用s+="(",s(((,一直多一个左括号。

vector<string> generateParenthesis(int n)
   {
        vector<string > st;
        string s;
        ges(n,n,st,s);
        return st;

    }

void ges(int leftnum,int rightnum,vector<string>&st,string s)
 {
   if(leftnum==0&&rightnum==0)
       st.push_back (s);
   if(leftnum>0)
       ges(leftnum-1,rightnum,st,s+'(');
   if(rightnum>0&&leftnum<rightnum)
       ges(leftnum,rightnum-1,st,s+')');
 }

如果是s+'('程序没有问题,可是如果改成s+="("结果就出错了。
这是s+'('的结果:"((()))","(()())","(())()","()(())","()()()"
这是s+="("的结果:"((()))","((()())","((()()()","(()(())","(()(()()"
可以看到字符串相加的模式下一直多一个(。
萌新想知道,这是为啥呀?

如果执行完
ges(leftnum-1,rightnum,st,s+'(');
下面的if永远不成立,那么一样
否则不一样,因为+=改变了s

或者
 if(rightnum>0&&leftnum<rightnum)
 ->
 else  if(rightnum>0&&leftnum<rightnum)