以下是我的代码,开发环境是DEV C++11。
#include<iostream>
using namespace std;
class A{
public:
int a=15;
};
class B:public A
{
};
int main(){
int A::*ptr=&B::a; //OK
int B::*ptr1=&A::a; //why?
int B::A::*ptr2=&B::a;//why?
int B::A::*ptr3=&A::a; //why?
}
我已经阅读了《编程语言-C++》并且知道
&B::a
的类型是int A::*
,但我不理解为什么下面的三行代码可以通过编译。
对我来说最奇怪的是int B::A::*
的语法,它的意义是什么?我只是一个C/C++
的新手,请包容我的奇怪问题。
ptr
的类型是int A::*
,ptr2
的类型是int B::A::*
,等等。正如你所看到的:OP 发布的代码可以编译通过,他们只是对为什么它能编译通过感到困惑。 - Algirdas Preidžiusint B::A::*
只是一种间接层次,实际上是int A::*
。 - Ron