正如我刚刚学到的,对于指针p
,有两种等效的访问被引用对象成员的方法,即p->foo
和(*p).foo
。
是否存在最好使用的技术论据?
注意:我读到的一个论点是,.
更安全,因为它不能过载,而->
可以。然而,我想肯定还有更多的参数,因为在我所处理的大多数C++代码中,我只看到->
-构造。
对于原始指针,不能重载运算符。
对于智能指针,operator *
也可以重载,并且应该返回与operator ->
相同的对象(尽管已取消引用)。
operator ->
的可读性比将所有内容都封装在括号中要好得多,尤其是当您连续多次使用它时。
operator ->
是链接的(operator ->
在返回的对象上被调用,它可以再次被重载),而operator *
不是,这有一点略有不同,但这种情况会以不同的结果结束,这是不寻常的。
通常,两种方法都做相同的事情:
p->member
(*p).member
除了重载运算符以获得特殊行为的情况。
至于哪个"更好",取决于什么是更好。。。p->member
要干净得多,使代码更容易理解,这总是一个很大的优势。
举一个更复杂的例子:
struct NewType
{
int data;
}
void foo (NewType **p)
{
int temp0 = (*p)->data;
int temp1 = (*(*p)).data;
}
temp0
和temp1
都将具有相同的值,但更容易了解temp0
的情况。