2012-12-18 16 views
1

可能重複:
Why does C have a distinction between -> and .?爲什麼指針上的成員訪問/元素選擇有不同的操作符?

編譯器是足夠聰明的知道,如果左側操作數的指針或引用。爲什麼會員訪問有兩個不同的運算符(。和 - >)?

它是否使間接顯式?易讀性?在設計C時,有沒有關於可用硬件的東西,在閱讀源代碼時可以輕鬆區分這些操作?

我讀過關於它簡單地是(*ptr).member的簡寫語法,但是ptr.member永遠有效當ptr是一個指針嗎?如果ptr是一個指針,爲什麼不能ptr.member「正常工作」爲ptr->member

+0

是的,確切的重複。我應該搜索更多。 –

+1

a)「如果ptr是一個指針,爲什麼不能將ptr.member作爲ptr->成員?」它可以在C中,但不是由於歷史原因。 b)在C++中,由於操作符重載,這將是一個不兼容的更改。 c)請注意,函數指針會自動解除引用......'p()'相當於'(******** p)()'d)使用更現代的語言,如rust或D. –

回答

1

不是一個答案,而是一個地方,這個區別是利用與智能指針和容器迭代器

在這兩種情況下,.運算符用於對對象本身進行操作,而->用於對其中包含的對象進行操作。

相關問題