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。它背后是否有特殊含义,因为我不知道为什么需要它以及为什么它会以这种方式工作。谢谢。

4

1 回答 1

3

&A::aa是一个非静态成员时,表达式返回一个指向成员对象的指针(如果是一个函数,则返回一个指向成员函数的指针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 回答