的帖子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