答えて
これは、プロパティへのアクセス(またはメソッド呼び出し)に続いて逆参照するためのショートカットです。コードで
、ここではこの同値のいくつかの例は以下のとおりです。
Foo *foo;
// field access
foo->bar = 10;
(*foo).bar = 10;
// method invocation
foo->baz();
(*foo).baz();
あなたはこれらの長いシーケンスを持っている場合、これは特に便利です。あなたは各要素は次へのポインタを持っている単独リンクリストのデータ構造を持っている場合たとえば、次は等価で5番目の要素を見つける(が、1つは非常に良く見えます)の方法:
linked_list *head, *fifth;
fifth = head->next->next->next->next;
fifth = (*(*(*(*head).next).next).next).next;
はるかに便利です。実際のコードのコードスニペットは、リソース記述子( 'rd')へのポインタがあれば、リソースをホストするサーバのフレンドリ名を取得します:' rd-> resource-> GetServer() - > GetFriendlyName() '。 'GetServer'関数は、リソースをホストするサーバへのポインタを返します。 'resource'はリソース記述子構造のメンバーです。それが '(*)'の形でいかに醜いか考えてみましょう。 –
C++のほぼすべての演算子と同様に、 '*'と ' - >'の両方に '(* a).b'と' a-> b 'のオーバーロードができる補遺を作るべきです。 'a'がポインタでないと同等です。 – PeterT
それは多くの場合、「会員アクセス」演算子と呼ばれています。基本的にa->b
は、(*a).b
と書く方が良いです。あなたは「にオブジェクトa
ポイントでb
メンバー/機能にアクセスする」としてa->b
と考えることができます。 「a
メンバーアクセスb
」と声を出して読むことができます。私は(別の人によって書かれた、いくつかの異なるプロジェクトから)チェック構造C++コードは、コードの行の10%(ヘッダーをカウントしない)のランダムサンプルで
は、少なくとも一つのメンバアクセス演算子を含んでいました。
あなたの答えに「ポインタ」という言葉の言及がはっきりしていません。はい、演算子 - >オーバーロードすることができますが、それでも実際にはポインタを模倣するオブジェクトに対してのみ行われます。 –
@NicolBolas通常は、(ほとんどの場合、)メンバアクセスオブジェクトは、文字どおりのポインタか、ポインタのように動作するクラスのインスタンスのいずれかに使用されます。私はそれが "オブジェクト" a * points * to "にアクセスすると言います。 –
はい、あなたはそう言いますが、あなたはそれを "a"のメンバーアクセス "b"と読むことができます。ポインタが実際にメンバーを持っていないので、 'a'が裸のポインタである場合、これは不可能です。それは "a"の逆参照であり、次にメンバーアクセスはb "である。そして、「逆参照」はポインタについて話すことなく意味をなさない。 –
->
演算子は、LHSのポインタ(またはポインタのようなオブジェクト)と、RHSの構造体またはクラスメンバ(lhs->rhs
)とともに使用されます。一般に(*lhs).rhs
に相当します。これは、メンバーにアクセスするもう1つの方法です。 Demeterの法則を無視し、lhs->mid->rhs
(一般的には(*(*lhs).mid).rhs
より読むのが簡単です)を書く必要がある方が便利です。
あなたは->
演算子をオーバーロードすることができ、かつスマートポインタは、頻繁に行います。 AFAIK.
演算子をオーバーロードすることはできません。
'.'は('。* '、' :: '、' '?:'とともに)多重定義することはできません。 –
- 1. C#のプロパティで "=>"演算子の意味は何ですか?
- 2. この ">> ="演算子はCの意味ですか?
- 3. C#コードの=>演算子の意味
- 4. C#で演算子| =の意味は何ですか?
- 5. Haskell演算子 "<>"の意味は何ですか?
- 6. 演算子 '=>'はC#でどういう意味ですか?
- 7. このJavaScript演算子の意味は何ですか? >>>
- 8. | =演算子はC++で何を意味しますか?
- 9. Pythonでは/ =演算子の意味は何ですか?
- 10. &演算子の意味は何ですか?次のコードで
- 11. "<>"演算子は何を意味しますか?
- 12. JavaScriptで '/ ='演算子の意味は何ですか?
- 13. 演算子は何ですか=意味ですか?
- 14. これらの演算子の意味は何ですか(**、^、%、//)? - Python?
- 15. ABAP演算子の?=の意味は何ですか?
- 16. 演算子の意味は?|
- 17. "no match for '演算子>>はコード内で何を意味しますか?
- 18. | =演算子の意味は何ですか?
- 19. 構造体内の演算子 ":"はCの意味ですか?
- 20. Scalaでは `# '演算子は何を意味しますか?
- 21. "+ +"演算子の意味(++ではない)
- 22. Pythonでは "<>"演算子は何を意味しますか?
- 23. 演算子の前にあるドットはCで何を意味しますか?
- 24. C++単項演算子はクラスの意味で何を使用しますか?
- 25. プロローグ演算子 "_:_" - 意味は?
- 26. Clojureで#^演算子は何を意味していますか?
- 27. この演算子は何を意味しますか?
- 28. 目的c演算子意味
- 29. 「インライン演算子T *()const」は何を意味しますか?
- 30. C++の演算子は何ですか?
+1なぜ人々があなたを下降させているのか分かりません。基本的な質問ですが、何ですか?それは悪くはありません。 –
+1:それは簡単な質問ですが、ウェブでそのような文字を検索することは非常に難しいです。あなたはおそらく[良い本](http://stackoverflow.com/q/388242/78845)から利益を得るだろう。 – Johnsyweb
本当に、それは基本的な質問です。しかし、それはまた、C++やCのどんな*本を見ても簡単に答えることができる質問です。Googleは人々がすべき唯一の研究ではありません。 –