這將是很好的,而不是收集在谷歌(誰不理解符號)分散的信息,要問在這個網站上的許多編程專業人士。Exotic Operators - 爲什麼它們有用?
我想知道的幾個運營商:
x->y
VS(*x).y
x.*y
VS*(x.y)
x->*y
VS*(x).*y
VS*(*(x).y)
VS*(x->y)
相互比較,是一個或其他更快?
這將是很好的,而不是收集在谷歌(誰不理解符號)分散的信息,要問在這個網站上的許多編程專業人士。Exotic Operators - 爲什麼它們有用?
我想知道的幾個運營商:
x->y
VS (*x).y
x.*y
VS *(x.y)
x->*y
VS *(x).*y
VS *(*(x).y)
VS *(x->y)
相互比較,是一個或其他更快?
1號僅僅是爲了方便和C.已經存在考慮:
x->y->z
VS
(*(*x).y).z
其他兩家運營商不這樣做你認爲他們做的。
x.*y
調用成員函數指向y
由x
而
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();
}
它是否必須是一個成員_function_呢? 'y'如何指向'x'上的成員函數?如果是這樣,不能''只是指向自己的功能? – Tqn
@Tqn:我添加了一個例子。而且,是的,它必須是一個功能。 –
據我所知,在基本實現這些運營商之間絕對沒有區別 - 它們是等價的。但是,您可以覆蓋都*
和->
具有不同的行爲。
它們是等價的,它只是語法糖。
這是第一和第二種情況混合在一起。
*爲什麼有人會決定把它放在C++?* [Bjarne](http://stackoverflow.com/users/109934/bjarne-stroustrup),我們需要你在這裏。 –
當'operator->'沒有超載時,絕對沒有區別,因爲'x-> y'只是'(* x).y'的語法糖,並且沒有性能差異。我相信他們被放在C++中與C兼容,後者引入了這些操作符。一個顯着的區別是,在C++中'operator->'可以被重載,而'''不能。 –
@ ParkYoung-Bae將該評論置於答案中? :P – Tqn