C++ 我应该选择点(.)还是箭头(>;)运算符来访问C++;?
与我一样,对于指针C++ 我应该选择点(.)还是箭头(>;)运算符来访问C++;?,c++,oop,pointers,C++,Oop,Pointers,与我一样,对于指针p,有两种访问引用对象成员的等效方法,即p->foo和(*p).foo 是否有最好使用的技术论据 注意:我读到的一个论点是,更安全,因为它不能重载,而->可以。但是,我猜想,必须有更多的参数,就像我在大多数C++代码中所做的那样,我只看到了 >代码> >构造> < /p> 对于原始指针,运算符不能被重载。 对于智能指针,运算符*也可以重载,并应返回与运算符->相同的对象(尽管已取消引用) 操作符->的可读性比将所有内容都用括号括起来要好得多,尤其是当您要在一行中多次使用它时 虽
p
,有两种访问引用对象成员的等效方法,即p->foo
和(*p).foo
是否有最好使用的技术论据
注意:我读到的一个论点是,
更安全,因为它不能重载,而->
可以。但是,我猜想,必须有更多的参数,就像我在大多数C++代码中所做的那样,我只看到了<代码> >代码> >构造> < /p> 对于原始指针,运算符不能被重载。
对于智能指针,运算符*
也可以重载,并应返回与运算符->
相同的对象(尽管已取消引用)
操作符->
的可读性比将所有内容都用括号括起来要好得多,尤其是当您要在一行中多次使用它时
虽然
操作符->
是链接的(操作符->
在返回的对象上被调用,并且可以再次重载),但是操作符*
不是链接的,但是出现这样的情况是不寻常的,即这将导致不同的结果。对于原始指针,操作符不能重载
对于智能指针,运算符*
也可以重载,并应返回与运算符->
相同的对象(尽管已取消引用)
操作符->
的可读性比将所有内容都用括号括起来要好得多,尤其是当您要在一行中多次使用它时
虽然
操作符->
是链式的(操作符->
在返回的对象上被调用,并且可以再次重载),但是操作符*
不是链式的,但是这种情况下会以不同的结果结束是不常见的。通常,这两种方法都做相同的事情:
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
的情况一般来说,这两种方法都做相同的事情:
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
的情况要容易得多,因为*
也可能过载。不要相信你读到的所有内容。你会没事的。这是一个固执己见的问题,没有真正的答案。只需继续编码并自行决定,但如果您决定在任何地方执行(*p).foo
都更具可读性,那么您就错了;-)@ServéLaurijssen我要求提供技术参数(正如我在说明中给出的)。例如,可重载性是一个硬事实。我认为适当的事实是我要用的软的决定。<代码> */COM>也可以超载。不要相信你所读的一切。你会没事的。这是一个固执己见的问题,没有真正的答案。只需继续编码并自行决定,但如果您决定在任何地方执行(*p).foo
都更具可读性,那么您就错了;-)@ServéLaurijssen我要求提供技术参数(正如我在说明中给出的)。例如,可重载性是一个硬事实。我认为适当的事实,我会用软的决定。