str.size() 输出结果不一样
str += 'a' + 'a';//报错
闭关修行中......
这是因为:前者先做'
这里是char类型,不是常量字符串,首先根据优先级,会先计算后面的'0'+'a',对于char类型,相加还是一个char类型('a'),所以+=char类型,实际只append了一个字符。
¦ /** ¦ * @brief Append a character. ¦ * @param c The character to append. ¦ * @return Reference to this string. ¦ */ ¦ basic_string& ¦ operator+=(_CharT __c) ¦ { this->push_back(__c); return *this; ¦ }
这是因为(1)运算符优先级不同,+高于+=;(2)加法的操作数(operand)不同。
+
+=
s += 's += ('s = s + ('char tmp = 's += 'std::string tmp = s + 'rrreee'; s = tmp + 'a';'; s += 'a';' + 'a'; s += tmp;' + 'a');' + 'a');' + 'a';
s += ('s = s + ('char tmp = 's += 'std::string tmp = s + 'rrreee'; s = tmp + 'a';'; s += 'a';' + 'a'; s += tmp;' + 'a');' + 'a');
s = s + ('char tmp = 's += 'std::string tmp = s + 'rrreee'; s = tmp + 'a';'; s += 'a';' + 'a'; s += tmp;' + 'a');
char tmp = 's += 'std::string tmp = s + 'rrreee'; s = tmp + 'a';'; s += 'a';' + 'a'; s += tmp;
s += 'std::string tmp = s + 'rrreee'; s = tmp + 'a';'; s += 'a';
std::string tmp = s + 'rrreee'; s = tmp + 'a';
等价于
类似于
两个char类型的变量(字符)做加法,相当于把两个字符对应的数值相加,所以'
char
'
'0' + 'a' 得到的是一个新的字符, 所以 你这样相当于:
char c = 'rrreee' + 'a'; s += c; // 只是添加了一个字符
这是因为:前者先做'
这里是char类型,不是常量字符串,首先根据优先级,会先计算后面的'0'+'a',对于char类型,相加还是一个char类型('a'),所以+=char类型,实际只append了一个字符。
发代码的时候请不要发截图。
这是因为(1)运算符优先级不同,
+
高于+=
;(2)加法的操作数(operand)不同。等价于
rrreee类似于
rrreee等价于
rrreee两个
char
类型的变量(字符)做加法,相当于把两个字符对应的数值相加,所以'
'0' + 'a' 得到的是一个新的字符, 所以 你这样相当于: