所以说我有一个对象/指针/无论这个东西的定义是什么:
A* a = new A();
碰巧有方法
b();
c();
我发现的做事方式是:
a->b();
并且该方法非常有效。 但是现在我看到人们这样做了:
(*a).b();
问题是:这两种调用方法的方法之间有什么区别(即每个方法管理的地址和值如何),根据这种方式,最好使用哪种方式?
如果这是其他问题的重复,请告诉我,我会在看到原始问题后将其删除。
答案 0 :(得分:6)
没有区别。它只是一个不同的符号。
答案 1 :(得分:2)
对于指针,没有区别:
如果您声明:
A* pointer_to_A = new A();
然后根据定义这两个是等价的:
pointer_to_A->b();
(*pointer_to_A).b();
但是,如果你在对象上声明:
A a;
然后这两个不一定相同:
a->b();
(*a).b();
在这种情况下,第一行调用A::operator->()
,而第二行调用A::operator*()
。 (旁白:这种情况有点罕见。它最常用于行为类似于指针的对象:迭代器,智能点等。如果它们设计得很好,那么上面的两种形式仍然是相同的。)
答案 2 :(得分:0)
没有区别。更喜欢->
因为它更清洁,并说明你的意思更好。
但是,->
和*
可能会重载。所以对于某些类,他们可能做不同的事情,虽然这是非常罕见的,而且指针也是不可能的。
答案 3 :(得分:0)
->
表示法是语法糖。