我是否更喜欢使用点(。)或箭头( - >)运算符来访问C ++中的指针成员?

时间:2016-04-01 09:09:38

标签: c++ oop pointers

作为StoryBoard,对于指针p,有两种等效方式可以访问引用对象的成员,即p->foo(*p).foo

是否有最适合使用的技术论据?

注意:我读到的一个论点是,.更安全,因为它不能重载,而->可以。我想,但是,必须有更多的参数,因为在我工作的大多数C ++代码中,我只看到-> - 构造。

2 个答案:

答案 0 :(得分:5)

对于原始指针,操作符不能超载。

对于智能指针,operator *也可以重载,并且应该返回与operator ->相同的对象(尽管已取消引用)。

operator ->是IMO比将所有内容包装在括号中更好的可读性,尤其是当你连续多次使用它时。

operator ->被链接有一点点差异(在返回的对象上调用operator ->并且它可以再次被重载),而operator *不是,但是有一个不寻常的这种情况会以不同的结果结束。

答案 1 :(得分:0)

通常,两种方法都做同样的事情:

p->member
(*p).member

除了重载运算符以获得特殊行为的情况。

至于哪个更好'这取决于更好的意义...... p->member更清晰,使代码更容易理解,这总是一个很大的优点。

举一个更复杂的例子:

struct NewType
{
   int data;
}

void foo (NewType **p)
{
   int temp0 = (*p)->data;
   int temp1 = (*(*p)).data;
}

temp0temp1都具有相同的价值,但查看temp0的内容会更容易。