1

私はどこかでいくつかのコードと定義を見ていました

 class A {
       public:
              int a,b;
 };

 main() {
        A a;
        std::cout<<"Test output "<<&A::a<<" "<<&A::b<<std::endl;
 }

 Output
       1 1

私が理解していないのは、aとbはAの静的メンバーではありませんが、静的メンバーのようにアクセスするとエラーが発生しますが、静的メンバーのようにアドレスにアクセスすると1が出力されます。その背後に特別な意味がありますか、cozなぜそれが必要なのか、なぜこのように機能するのかわかりません。ありがとう。

4

1 に答える 1

3

が非静的メンバー&A::aである場合の式aは、メンバーオブジェクトへのポインター(または関数の場合はメンバー関数へのポインター)を返します。次のように使用できます。a

A a;
a.a = 1;
a.b = 2;

int (A::*) some_int_member_of_a = &A::a;
std::cout << a.*some_int_member_of_a; // prints 1

a.*some_int_member_of_a = 5;
std::cout << a.*some_int_member_of_a; // now prints 5

ストリーム出力操作は、メンバーへのポインター値に対して定義されていませんが、それらからの変換があり、boolこれが出力に出力されます。

于 2012-06-10T22:03:40.787 に答える