2013-12-22 47 views
8

我最近查看了SGI STL的源代碼。我想知道我是否可以使用 「 - >」 操作者更換(*node).data實施operator*(),就像這樣:爲什麼STL中List的迭代器使用(* node).data而不是node-> data?

reference operator*() const {return (*node).data;} 

改爲:

reference operator*() const {return node->data;} 

除了:

節點是指向結構對象的指針,如下所示:

template<class T> 
struct __list_node { 
    typedef void * void_pointer; 
    void_pointer prev; 
    void_pointer next; 
    T data; 
}; 
+0

你可以,但有什麼意義? – 2013-12-22 14:44:04

+2

可能,是的。什麼類型是'node',並且它是否重載'operator->'或者一元'operator *'? –

+0

節點是一個指針,它指向一個struct __list_node {} – Jeff

回答

10

在大多數情況下(例如,當node是指針時),這些將是等效的。 x->y運營商被定義爲相當於(*(x)).y。但是,可能過載operator*operator->,在這種情況下,它們可能不像您預期​​的那樣運行(但它們的應爲)。

正如你所說,在這種情況下,node只是一個指針,所以它們是等價的。

+6

*「在這種情況下,他們的行爲可能不如您預期的那樣」* - 但如果他們不這樣做,請停止使用該庫。作者是個壞人。 –

相關問題