很高兴,而不是在谷歌(不懂符号)上收集零散的信息,向网站上的许多编程专业人士询问。
我想知道一些运营商:
x->y
vs (*x).y
x.*y
vs *(x.y)
x->*y
vs *(x).*y
vs *(*(x).y)
vs *(x->y)
相互比较,是一个还是更快?
答案 0 :(得分:4)
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();
}
答案 1 :(得分:2)
据我所知,这些运营商在基本实施方面完全没有区别 - 它们是等价的。但是,您可以覆盖 *
和->
以使其具有不同的行为。
它们是等价的,它只是语法糖。
将第1和第2个案件混合在一起。