最近實現了乙個string
類,新增了一些c++11
元素。除了基本的構造析構函式,拷貝構造和賦值函式,另外新增移動拷貝和賦值函式。default是乙個很方便的特性有木有。
//default constructor
kianstring()=default
;kianstring(
const
char *c): ch_(0
) ;~kianstring()
//copy constructor
kianstring(const kianstring &str)
//assign operator, is ok for both lvalue and rvalue!
kianstring &operator=(kianstring str) noexcept
//move constructor
kianstring(kianstring &&str) noexcept : ch_(str.ch_)
賦值拷貝採用了
copy and swap idiom:
inline void swap(kianstring &str1, kianstring &str2)//assign operator, is ok for both lvalue and rvalue!
kianstring &operator=(kianstring str) noexcept
這樣做有幾個好處:
1.引數是傳值呼叫,可以同時使用左值和右值,使用右值時自動呼叫移動拷貝函式
2.強異常安全的,異常只會發生在引數拷貝時,如果發生異常,不會影響this
。3.值傳遞產生副本,所以自賦值也是正確的.
加法運算子過載:
kianstring &operator+=(const kianstring &str)template
const t operator+(const t& lhs, const t& rhs)
1. 按照《c++
程式設計規範》第27
條,實現+
運算子,先要實現+=
,語義一致,便於維護
2. 將operator+
定義為非成員函式,能夠同時接受左右引數的隱式轉換,
因為operator+=
是public
,所以operator+
不需要設成friend
。3. 將operator+
定義為template
。code:
自己動手實現乙個簡單的string類 一
定義乙個基本的 string 類 class string private char base long int length 我們可以看到在這個類裡面我們用乙個char型指標來儲存字串值,long int 型值length來儲存字串的長度。由於我們知道string類支援這樣的建構函式 string...
實現乙個string類
需要實現的基本功能 建構函式 拷貝建構函式 賦值函式 析構函式.以前合稱big three,現在叫做copy control 1 class string 1213 不簡潔版本 14string string const char str else 23 24 2526 string string ...
自己寫乙個簡易的string型別
c語言中沒有string型別,於是,在使用c語言的時候,總會用char 型別來替代string型別,但是char 和string型別還是有一定的不同的。最大的差異就是在對字串的操作上。顯然 比起char string對於字串的操作更加的簡便,比如說 1.兩個string類的變數str1和str2,我...