2

次のようなコードを時々見かけます。

class A {
    int b;
}

void foo() {
    int* blah = &A::b;
    // Other stuff.
}

しかし、クラスのインスタンスなしでクラスのメンバー変数のアドレスを取得することは、どのように役立つでしょうか? それは何をするためのものか?

4

2 に答える 2

8

コードの形式が正しくないため、コンパイルできません。の型は ではblahなくint*ですint (A::*)。つまり、「へのポインター」ではなく、「型がintであるクラス型のデータ メンバーへのポインター」Aですint

メンバーへのポインターを取得するには、メンバーにアクセスできる必要があることに注意してください。で計算する&A::bにはfoo()bパブリック データ メンバーであるfoo()必要があるか、 のフレンドである必要がありAます。

メンバーへのポインターはオブジェクトを指しません。むしろ、メンバーへのポインターをオブジェクトにバインドして、そのデータ メンバーの値を取得できます。メンバへのポインタを のインスタンスにバインドすることによりb、オブジェクトのデータ メンバの値を取得できます。例えば、AblahA

A x;
int b_value = x.*blah; // b_value has the value of x.b
于 2012-07-05T03:16:41.190 に答える
1

クラスAにはintがありbます。つまりb、クラスのデータです。のインスタンスがある場合は、へのAポインタを取得できます。bA

私はあなたがこのケースを求めたいと思います:

class A{
   int foo(int i) {
   }
}

コンパイル後、メソッドfooにはアドレスがあり、へのポインタを取得できます&A::foo

于 2012-08-20T14:00:23.667 に答える