struct A
{
void f(int j)
{
std::cout<<j<<std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
int*p=NULL;
//(1)p=(int*&)(&A::f); error C2102: '&' requires l-value
typedef void (A::* PMF)(int);
PMF p2=&A::f;
p=(int*&)p2;//(2)这样是可以把p2中存储的内存地址强制解析成int*赋值给p的
return
0;
}
目的是想通过一条语句话获得A::f的地址
(2)处进行分步转换没有问题,但是在(1)处用看似和(2)处"相同"的一步转换却无法成功,提示“error C2102: '&' requires l-value”里面的&是指取地址吧A::f不是左值吗?(PMF p2=&A::f;取地址怎么OK呢??)怎么取不到地址呢?
问题1. 帮忙解释下(1)处错误而(2)处正确的原因(我看两者,看上去只是分开写和合在一起写的不同= =!)
问题2. (1)处是否存在一条语句即可完成的转换(p来存储A::f的地址) |