使用+
是在 C++ 中將字符附加到字符串的有效方法,如下所示:
string s = "";
s += 'a';
然而,
string s = "";
s += 'a' + 'b';
給出一個warning: implicit conversion from 'int' to 'char' changes value
and 不附加a
andb
字符。
為什麼第一個示例附加了字符而第二個示例沒有?
這與運算符優先級有關。讓我們以表達式為例:
string s = "";
s += '0' + '1';//here + has higher precedence than +=
Here 的+
優先級高於+=
so 字符'0'
,'1'
並作為('0' + '1')
. 所以上面等價於寫:
s+=('0' + '1');
接下來,有和和的從到到的隱式轉換。所以變成十進制48,而字符變成十進制49。char
int
'0'
'1'
'0'
'1'
所以基本上以上簡化為:
s+=(48 + 49);
或者
s+=(97);
現在 97 對應於字符a
,因此附加到命名的字符串變量的最終結果s
是字符a
。
現在讓我們將其應用於您的示例:
string s = "";
s += 'a' + 'b';
首先是由於優先:
s+=('a' + 'b');
從char
to 的第二次隱式轉換int
發生:
s+=(97 + 98);
所以
s+=195;
所以十進制195對應的字符會被追加到字符串s中。
您可以嘗試添加和減去不同的字符以確認是否發生了這種情況。
為什麼第一個示例附加了字符而第二個示例沒有?
所以根本原因是運算符優先級。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句