warum return (&**this) ???
-
Hallo,
in der MS STL Implementierung der map (xtree) findet sich folgendes Codestück:
pointer operator->() const { // return pointer to class object return (&**this); }Warum **&this?
Das & mit dem * sollte sich doch "wegkürzen"?
-
Kommt draufan was
operator*()undoperator&()zurückgeben...
-
Der Trick
&*itist bekannt um von einem Iterator in einen Zeiger zu konvertieren. Bei dem gezeigten Code muss halt noch der this-Pointer dereferenziert werden.
-
const_reference operator*() const { // return designated value #if _HAS_ITERATOR_DEBUGGING if (this->_Mycont == 0 || _Ptr == 0 || _Ptr == ((_Myt *)this->_Mycont)->_Myhead) { _DEBUG_ERROR("map/set iterator not dereferencable"); _SCL_SECURE_OUT_OF_RANGE; } #else _SCL_SECURE_VALIDATE(this->_Has_container()); _SCL_SECURE_VALIDATE_RANGE(_Ptr != ((_Myt *)(this->_Getmycont()))->_Myhead); #endif /* _HAS_ITERATOR_DEBUGGING */ return (_Myval(_Ptr)); }operator&() scheint nicht vorhanden zu sein.
-
kürzer schrieb:
Der Trick
&*itist bekannt um von einem Iterator in einen Zeiger zu konvertieren. Bei dem gezeigten Code muss halt noch der this-Pointer dereferenziert werden.ah ok das macht sinn!
-
operator&() wird auch von der const_reference aufgerufen (was eine Referenz ist und natürlicherweise einen Pointer zurückgibt).