2014-07-15 31 views
0

這將是很好的,而不是收集在谷歌(誰不理解符號)分散的信息,要問在這個網站上的許多編程專業人士。Exotic Operators - 爲什麼它們有用?

我想知道的幾個運營商:

  1. x->y VS (*x).y
  2. x.*y VS *(x.y)
  3. x->*y VS *(x).*y VS *(*(x).y) VS *(x->y)

相互比較,是一個或其他更快?

+1

*爲什麼有人會決定把它放在C++?* [Bjarne](http://stackoverflow.com/users/109934/bjarne-stroustrup),我們需要你在這裏。 –

+0

當'operator->'沒有超載時,絕對沒有區別,因爲'x-> y'只是'(* x).y'的語法糖,並且沒有性能差異。我相信他們被放在C++中與C兼容,後者引入了這些操作符。一個顯着的區別是,在C++中'operator->'可以被重載,而'''不能。 –

+0

@ ParkYoung-Bae將該評論置於答案中? :P – Tqn

回答

4

1號僅僅是爲了方便和C.已經存在考慮:

x->y->z 

VS

(*(*x).y).z 

其他兩家運營商不這樣做你認爲他們做的。

x.*y 

調用成員函數指向yx

x->*y 

做同樣的事情,但對於x是一個指針,而不是引用的對象。

這裏是通過指針調用成員函數的例子:

struct Foo { 
    void bar(); 
}; 

int main() { 
    typedef void (Foo::*foo_mem_ptr)(); 
    // y points to Foo::bar 
    foo_mem_ptr y = &Foo::bar; 
    Foo x; 
    // call y with x as this 
    x.*y(); 
    // same for pointer to x 
    Foo *px = &x; 
    px->*y(); 
} 
+0

它是否必須是一個成員_function_呢? 'y'如何指向'x'上的成員函數?如果是這樣,不能''只是指向自己的功能? – Tqn

+0

@Tqn:我添加了一個例子。而且,是的,它必須是一個功能。 –

2
  1. 據我所知,在基本實現這些運營商之間絕對沒有區別 - 它們是等價的。但是,您可以覆蓋*->具有不同的行爲。

  2. 它們是等價的,它只是語法糖。

  3. 這是第一和第二種情況混合在一起。

相關問題