STL容器的賦值運算子可以更靈活嗎

2021-08-22 20:16:58 字數 1103 閱讀 1606

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 無論運算子兩端簡單還是複雜最終...