當進行string物件和字串字面值進行連線時,+運算子的左右至少出現一個是string型別的。
string s1 = "hello";
string s2 = "world";
string s3 = s1 + ",";//ok
string s4 = "hello" + ",";//error
string s5 = s1 + "," + "world";ok
string s6 = "hello" + "," + s2;error
s4錯誤的原因是試圖直接將兩個字串的字面值進行相加;
s5沒錯因為前面一個+相當於把前面兩個先做temp = s1+",";的操作,temp是字串型,然後將temp與後面的進行相加;
s6錯誤的原因參照s4、s5就知道了。
補充:過載就是對已有的運算子進行重新定義,以適應不同的資料型別,比如string s1 = string s2;int i1 = int i2;如果要用自定義的型別type_self,使得type_self tp1 = type_self tp2;一般的C++標準庫裡應該都有集成了,只有用到自己定義的資料型別就得重新寫函式定義了。
string中的字串複製:
String::String(const String &s):
_cstr(s._cstr),
_used(s._used),
_length(s._length),
_capacity(s._capacity)
{
++*_used;
}
當進行string物件和字串字面值進行連線時,+運算子的左右至少出現一個是string型別的。
string s1 = "hello";
string s2 = "world";
string s3 = s1 + ",";//ok
string s4 = "hello" + ",";//error
string s5 = s1 + "," + "world";ok
string s6 = "hello" + "," + s2;error
s4錯誤的原因是試圖直接將兩個字串的字面值進行相加;
s5沒錯因為前面一個+相當於把前面兩個先做temp = s1+",";的操作,temp是字串型,然後將temp與後面的進行相加;
s6錯誤的原因參照s4、s5就知道了。
補充:過載就是對已有的運算子進行重新定義,以適應不同的資料型別,比如string s1 = string s2;int i1 = int i2;如果要用自定義的型別type_self,使得type_self tp1 = type_self tp2;一般的C++標準庫裡應該都有集成了,只有用到自己定義的資料型別就得重新寫函式定義了。
string中的字串複製:
String::String(const String &s):
_cstr(s._cstr),
_used(s._used),
_length(s._length),
_capacity(s._capacity)
{
++*_used;
}