我应该更喜欢点 (.) 或箭头 (->) 运算符来访问 C++ 中的指针成员吗?



正如我刚刚学到的,对于指针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;
}

temp0temp1都将具有相同的值,但更容易了解temp0的情况。

最新更新