str.size() 输出结果不一样
str += 'a' + 'a';//报错
闭关修行中......
這是因為:前者先做'
ABCDa5 ABCDrrreeea6
你貼的那個新產生的錯誤的原因是'a' = 97
超出了0-127這個ascii字符的範圍,所以從數值隱式轉換成字符報warning了
這裡是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; // 只是添加了一个字符
這是因為:前者先做'
而後者append了兩個字元。你貼的那個新產生的錯誤的原因是'a' = 97
97 + 97 = 194超出了0-127這個ascii字符的範圍,所以從數值隱式轉換成字符報warning了
這裡是char類型,不是常數字串,首先根據優先權,會先計算後面的'0'+'a',對於char類型,相加還是一個char類型('a'),所以+= char類型,實際只append了一個字元。
發程式碼的時候請不要發截圖。
這是因為(1)運算子優先權不同,
+
高於+=
;(2)加法的運算元(operand)不同。等價於
rrreee類似
rrreee等價於
rrreee兩個
char
類型的變數(字元)做加法,相當於把兩個字元對應的數值相加,所以'
'0' + 'a' 得到的是一個新的字元, 所以 你這樣相當於: