当静态变量访问时,类的非静态成员的地址将地址打印为1

时间:2012-06-10 22:01:25

标签: c++ pointers static-members

我看到了一些代码和定义,例如

 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.是否有特殊的它背后的意义,因为我不知道为什么它需要它以及它为什么这样工作。感谢。

1 个答案:

答案 0 :(得分: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的转换是在输出中打印的内容。