ホームページ > バックエンド開発 > C++ > C の `->*` と `.*` のメンバーへのポインタ演算子の違いは何ですか?

C の `->*` と `.*` のメンバーへのポインタ演算子の違いは何ですか?

Linda Hamilton
リリース: 2024-11-19 04:24:03
オリジナル
619 人が閲覧しました

What's the Difference Between C  's `->*` および `.*` メンバーへのポインター演算子?
*` と `.*` メンバーへのポインター演算子? " />

メンバーへのポインタ演算子の謎を解く -> C

と .

既存のリソースを調べたにもかかわらず、依然として困惑していることに気づくかもしれません。 C の謎めいた -> および . 演算子 この記事は、解明することを目的としています。

メンバーへのポインター演算子の目的を理解する

両方 -> と . は、メンバー関数への間接的なアクセスを容易にするメンバーへのポインター演算子です。この複雑な用語は、本質的に、これらの演算子を使用すると、関数を呼び出すことができることを意味します。オブジェクトから直接ではなく、ポインターを介したメンバー関数。

構文と使用法

  • ->:この演算子は、オブジェクトのメンバー関数を指すポインターを逆参照するために使用されます。その構文は次のとおりです。 (ptr->member_func_ptr)().
  • .: -> と同様に、この演算子もメンバー関数へのポインターを逆参照します。ただし、ポインタがオブジェクトのポインタまたはクラスを通じて逆参照される場合に使用されます。構文は (object_ptr.*member_func_ptr)().

使用する場合 -> と .

  • ->*:オブジェクトへのポインターを介してメンバー関数へのポインターを逆参照する場合は、この演算子を使用します。
  • .*: オブジェクトのポインターを介してメンバー関数へのポインターを逆参照する場合は、この演算子を使用します。 class.

メンバー関数 f() と g() を持つクラス X について考えます。 f() 関数を指すポインターがあるとします。

struct X {
  void f() {}
  void g() {}
};

typedef void (X::*pointer)();
pointer somePointer = &X::f;
ログイン後にコピー

オブジェクト x を使用して somePointer を呼び出すには、次のようにします。

X x;
(x.*somePointer)(); // Calls x.f()
ログイン後にコピー

x がオブジェクトでない場合ただし、オブジェクトへのポインターの場合は、 ->* を次のように使用してメンバー関数を呼び出すことができます。

X* px = new X;
(px->*somePointer)(); // Calls px->f()
ログイン後にコピー

この例は、ポインターを介して間接的にメンバー関数にアクセスする場合、特にポイント先のオブジェクトを扱う場合、 ->> または . の使用が重要であることを示しています。

以上がC の `->*` と `.*` のメンバーへのポインタ演算子の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート