我看到了一些代码和定义,例如
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.是否有特殊的它背后的意义,因为我不知道为什么它需要它以及它为什么这样工作。感谢。
答案 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
的转换是在输出中打印的内容。