作为,对于指针p
,有两种等效方式可以访问引用对象的成员,即p->foo
和(*p).foo
。
是否有最适合使用的技术论据?
注意:我读到的一个论点是,.
更安全,因为它不能重载,而->
可以。我想,但是,必须有更多的参数,因为在我工作的大多数C ++代码中,我只看到->
- 构造。
答案 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;
}
temp0
和temp1
都具有相同的价值,但查看temp0
的内容会更容易。