C++箭头运算符equivelence

Tom*_*mmy 4 c++ pointers

帖子我可以使用什么而不是箭头操作符,` - >`?箭头操作员-在C(>)的使用 状态

以下两个表达式是等效的:

x->y
(*x).y
Run Code Online (Sandbox Code Playgroud)

但是,当作为数学等价时,这似乎并不总是正确的.

为什么g ++在替换时会抛出错误

a->b->c
Run Code Online (Sandbox Code Playgroud)

a->(*b).c
Run Code Online (Sandbox Code Playgroud)

看来上述等价并不总是可以替换的.因此,我认为"等同"一词有点误导.

另外,我不是指这个问题中的任何超载.

R. *_*des 16

你的关联规则错了.a->b->c(a->b)->c,不a->(b->c),所以它变成(*(a->b)).c(然后(*((*a).b)).c).


Luc*_*ore 8

因为您没有正确更换操作员.它应该是:

(*(a->b)).c
Run Code Online (Sandbox Code Playgroud)

你把你的表达当作a->(b->c)你应该对待它的时候(a->b)->c