stl容器的賦值運算子可以更靈活嗎?
stl容器如果元素型別不同是不能相互賦值的,
即使元素型別是相容的.
如兩個list, 乙個存放基類b指標, 乙個存放派生類d指標:
class b {};
class d : public b {};
std::listlb;
std::listld;
lb = ld; // error!
編譯報錯
error: no match for 'operator=' in 'lb = ld'|
list.tcc|121|note: candidates are:
std::list<_tp, _alloc>& std::list<_tp, _alloc>::operator=(
const std::list<_tp, _alloc>&)
[with _tp = b*, _alloc = std::allocator]|
而boost::shared_ptr與boost::shared_ptr之間卻可以仍然保持相容性.
以下賦值與指標賦值一樣是正確的.
boost::shared_ptrpb;
boost::shared_ptrpd;
pb = pd;
因為stl容器與boost::shared_ptr的賦值運算子定義方式不一樣.
boost::shared_ptr賦值運算子中引數的模板引數與類的模板引數不同,
所以支援更靈活的賦值.
boost::shared_ptr& boost::shared_ptr::operator=(
const boost::shared_ptr&)
只要改寫stl容器的賦值運算子的引數, 同樣可以擴大靈活性.
例如將list<_tp,_alloc>&
list<_tp,_alloc>::
operator=(const list& __x)
改為:list<_tp,_alloc>&
list<_tp,_alloc>::
operator=(const list<_tp2, _alloc2> & __x)
不知為什麼stl沒有放開這種靈活性?
Python運算子 賦值運算子
賦值運算子與算數運算子有這個密不可分的關係,可以理解成是算數運算子在某種特定情況下的一種簡寫賦值運算子 說明舉例 展開形式 對應算數運算子寫法 簡單賦值運算子 x y x y 加賦值 也讀加等於 x y x x y 加賦值 也讀減等於 x y x x y 乘賦值 也讀乘等於 x y x x y 除賦...
賦值運算子
賦值運算子函式 include stdafx.h include class cmystring cmystring cmystring char pdata else cmystring cmystring const cmystring str cmystring cmystring cmyst...
賦值運算子
a 等 b 叫做賦值運算子,也是最基本的賦值運算子 int x 10 把10賦值給int型別的變數x。c 擴充套件的賦值運算子的特點 隱含了自動強制轉換。面試題 short s 1 s s 1 short s 1 s 1 請問上面的 哪個有問題?3 比較運算子 a b 無論運算子兩端簡單還是複雜最終...