1

重複の可能性:
C で -> と . が区別されるのはなぜですか?

コンパイラは、左側のオペランドがポインターか参照かを判断できるほどスマートです。メンバー アクセスに 2 つの異なる演算子 (. と ->) があるのはなぜですか?

間接性を明示するためですか?読みやすさのため?C が設計されたときに利用可能なハードウェアについて、ソース コードを読み取るときにこれらの操作を簡単に区別できる強力なケースがあったでしょうか?

の省略形の構文であると読んだことが(*ptr).memberありますptr.memberが、ptr がポインターの場合は有効ですか? ptr がポインタであるかのようptr.memberに「うまく機能しない」のはなぜですか?ptr->member

4

1 に答える 1

1

完全な答えではありませんが、この違いが利用される場所の 1 つは、スマート ポインターとコンテナーイテレーターです。

どちらの場合も、.演算子はオブジェクト自体の操作に->使用され、 は含まれるオブジェクトの操作に使用されます。

于 2012-12-18T02:03:55.173 に答える