的帖子What can I use instead of the arrow operator, `->`? 和Arrow operator (->) usage in C 状态C++箭头操作符equivelence
下面的两个表达式是等效的:
x->y (*x).y
但当当作这似乎并不总是真的数学等价。
为什么用
a->(*b).c
更换
a->b->c
何时G ++抛出一个错误?
看来上面的等值不是总是可以替换。因此,我认为“等值”一词有点误导。
此外,我不是指在这个问题上的任何重载。
顺便说一下,在这方面你错了(见答案),但一般来说'a-> b'和'(* a).b'不一定等价,因为' - >'和'*'可以为你自己的类重载。当'a'是指针类型时,它们* *完全等价,但是(或者当'operator - >'和'operator *'正确超载时)。 – 2012-07-16 19:34:56
Konrad,我的观点是我们必须小心“完全等效”这个词。当我读到这个短语时,它会显示“第一个的任何实例可以被第二个替换”。看来在这种情况下,等价取决于操作的顺序。 – Tommy 2012-07-16 19:49:43
他们*完全等同。但在进行替换时,您仍然需要遵守优先规则。你不能只做文本替换。毕竟,在数学中,“x + x”和“2 * x”是完全等价的(它们对x的所有值都是相等的),但是当你忽略数学规则并用数学表达式“ x + x/2“会得到错误的结果(因为x + x/2≠2 * x/2)。 – 2012-07-16 20:02:03